从 R 中的 url 获取重定向的数量

get the number of redirects from a url in R

我必须从我的数据框中的 url 中提取一个特征——重定向的数量。有没有办法像 python:

那样在 R 中找到数字
r = requests.get(url)
i=0
    for h in r.history:
                i=i+1
print(i)

httr::GET 中的 return 值完全没有记录,但是重定向中的 headers 等似乎出现在 $all_headers object 中:

> 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

httr::GET 的 return 值是一个 httr::response object,其核心文档位于 ?httr::response。您可以使用 str() 检查 whole object 以查看对大多数 R 用户而言不重要的部分。它已被记录在案,例如,永远。我不知道人们可能会因为它没有文档而感到困惑。也许头在云层之上……也许在轨道上或 space 或其他东西。

由于您想要的是重定向计数,因此您可能 实际上关心重定向 vs naive 所有响应的计数 headers。例如

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

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

length(res$all_headers)

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

您可能还想考虑:

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

计算实际的重定向(取决于实际的 "mission" 是什么)。