r - 如何使用 httr GET 命令刷新或重试特定网页?

标签 r get timeout httr

我需要使用不同的“ key ”访问同一个网页以获取它提供的特定内容。

我有一个键列表 x我使用 GET来自 httr 的命令包访问网页,然后检索我需要的信息y .

library(httr)
library(stringr)
library(XML)

for (i in 1:20){
    h1 = GET ( paste0("http:....categories=&query=", x[i]),timeout(10))
    par = htmlParse(file = h1)

    y[i]=xpathSApply(doc = par, path = "//h3/a" , fun=xmlValue)

}

问题是经常达到超时,它会破坏循环。

因此,如果达到超时,我想刷新网页或重试 GET 命令,因为我怀疑问题出在我尝试访问的网站的 Internet 连接上。

我的代码的工作方式,超时打破了循环。我需要忽略错误并转到下一次迭代或重试访问该网站。

最佳答案

purrr::safely() .您可以包装 GET像这样:

safe_GET <- purrr::safely(GET)

这消除了 tryCatch() 的丑陋让你做:
resp <- safe_GET("http://example.com") # you can use all legal `GET` params

你可以测试resp$resultNULL .把它放到你的重试循环中,你就可以开始了。

您可以通过执行以下操作来查看此操作:
str(safe_GET("https://httpbin.org/delay/3", timeout(1)))

这将要求 httpbin 服务在响应前等待 3 秒,但在 GET 上设置显式超时请求到 1s。我把它包裹在 str()显示结果:
List of 2
 $ result: NULL
 $ error :List of 2
  ..$ message: chr "Timeout was reached"
  ..$ call   : language curl::curl_fetch_memory(url, handle = handle)
  ..- attr(*, "class")= chr [1:3] "simpleError" "error" "condition"

因此,如果需要,您甚至可以检查消息。

关于r - 如何使用 httr GET 命令刷新或重试特定网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367918/

相关文章:

使用 R 读取 CSV,其中标题位于第二行

氧气 : how to document method without cluttering the help index?

javascript - parse error callback function not called jquery ajax 错误?

java - 如何为 SOAP 调用设置超时

德尔福: Globally change ADO command timeout

r - 转换覆盖图中轨迹的距离

替换字符串中的第 n 个数字

php - 如何将 HTML 表单中的值回显到另一个页面上的表格(使用 PHP)

python - 如何创建 HTTP GET 请求 Scapy?

Java RMI 超时(崩溃)