我必须从数据框中的网址中提取一个功能-重定向次数。有没有办法像在python中那样找到R中的数字:
r = requests.get(url)
i=0
for h in r.history:
i=i+1
print(i)
答案 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))
计算从中获得的实际重定向(取决于实际的“任务”是什么。)