有没有办法告诉R或RCurl软件包如果超过指定的时间段而放弃尝试下载网页并转到下一行代码?例如:
> library(RCurl)
> u = "http://photos.prnewswire.com/prnh/20110713/NY34814-b"
> getURL(u, followLocation = TRUE)
> print("next line") # programme does not get this far
这只会挂在我的系统上而不会进入最后一行。
修改: 基于@Richie Cotton的答案,虽然我可以“实现”我想要的东西,但我不明白为什么需要比预期更长的时间。例如,如果我执行以下操作,系统会挂起,直到我选择/取消选择“其他>> RGUI中的“缓冲输出”选项:
> system.time(getURL(u, followLocation = TRUE, .opts = list(timeout = 1)))
Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) :
Operation timed out after 1000 milliseconds with 0 out of 0 bytes received
Timing stopped at: 0.02 0.08 ***6.76***
解: 根据@Duncan的帖子,然后看看卷曲文档,我通过使用maxredirs选项找到了解决方案,如下所示:
> getURL(u, followLocation = TRUE, .opts = list(timeout = 1, maxredirs = 2, verbose = TRUE))
谢天谢地,
Tony Breyal
O/S: Windows 7
R version 2.13.0 (2011-04-13) Platform: x86_64-pc-mingw32/x64 (64-bit)
attached base packages:
[1] stats graphics grDevices utils
datasets methods base
other attached packages:
[1] RCurl_1.6-4.1 bitops_1.0-4.1
loaded via a namespace (and not attached):
[1] tools_2.13.0
答案 0 :(得分:5)
我相信Web服务器正在进入 通过告诉我们URL是暂时的混乱状态 移动然后它指向我们一个新的URL
http://photos.prnewswire.com/medias/switch.do?prefix=/appnb&page=/getStoryRemapDetails.do&prnid=20110713%252fN \ Y34814%252分贝&安培;行动=细节
当我们遵循这一点时,它会再次将我们重定向到......相同的网址!!!
所以超时不是问题。响应非常快,因此超时持续时间为 未超过。事实上,我们围成一圈,导致明显的悬挂。
我发现这一点的方法是将.bbt列表中的verbose = TRUE添加 然后我们看到了我们和服务器之间的所有通信。
d
答案 1 :(得分:4)
timeout
和connecttimeout
是curl选项,因此需要在列表中将.opts
参数传递给getURL
。不确定你需要哪两个,但从
getURL(u, followLocation = TRUE, .opts = list(timeout = 3))
编辑:
我可以重现这个悬念;更改缓冲输出并不能解决它(在R2.13.0和R2.13.1下测试),并且无论是否有超时参数都会发生。如果您在作为重定向目标的网页上尝试getURL
,则会显示为空白。
u2 <- "http://photos.prnewswire.com/medias/switch.do?prefix=/appnb&page=/getStoryRemapDetails.do&prnid=20110713%252fNY34814%252db&action=details"
getURL(u2)
如果删除page
参数,则会将您重定向到登录页面;也许美通社在做一些有趣的事情要求提供证书。
u3 <- "http://photos.prnewswire.com/medias/switch.do?prefix=/appnb&prnid=20110713%252fNY34814%252db&action=details"
getURL(u3)