从R中的网址获取重定向次数

时间:2018-11-28 23:11:18

标签: r curl httr

我必须从数据框中的网址中提取一个功能-重定向次数。有没有办法像在python中那样找到R中的数字:

r = requests.get(url)
i=0
    for h in r.history:
                i=i+1
print(i)

2 个答案:

答案 0 :(得分:1)

httr::GET的返回值完全没有记载,但是重定向的标头等似乎出现在$all_headers对象中:

> url = "http://github.com"
> g = httr::GET(url)
> length(g$all_headers)
[1] 2

因为http重定向到https。如果直接转到https,则看不到重定向:

> url = "https://github.com"
> g = httr::GET(url)
> length(g$all_headers)
[1] 1

答案 1 :(得分:1)

httr::GET的返回值是一个httr::response对象,其核心文档位于?httr::response。您可以使用str()检查整个对象,以查看对大多数R用户而言都不重要的部分。它已被记录下来,例如,永远。我不知道人们在哪里没有文档会感到困惑。也许头顶在云层之上……也许在轨道或太空之内。

由于您想要的是重定向计数,因此您可能 实际上关心重定向天真计数所有响应标头中。例如

res <- httr::GET("http://1.usa.gov/1J6GNoW")
sum(((sapply(res$all_headers, `[[`, "status") %% 300) == 1))

那是3(可能也不是您想要的)。

length(res$all_headers)

是4,而我怀疑您应该在重定向中包含4xx响应,但是如果它只是HTTP链中3xx与总数的比,您可能会更清楚。

>

您可能还需要考虑:

cat(rawToChar(curl::curl_fetch_memory("http://1.usa.gov/1J6GNoW")$headers))

计算从中获得的实际重定向(取决于实际的“任务”是什么。)