我无法使用连接到互联网上其他网址的R功能(例如read_html
,url.exists
等),并且可以为我可以从浏览器连接的网页获取超时等。我相信这是因为R没有使用我办公室网络中规定的代理设置。
我查看了另一个question on setting proxy for R,但我的情况不同,我们使用代理的自动配置脚本。
我尝试过设置以下
setInternet2(F)
Sys.setenv(http_proxy_user="userid:password")
Sys.setenv(http_proxy="http://myproxypac.mydomain/proxy.pac")
但它不起作用。
任何人都有关于在R中处理PAC的建议吗?
答案 0 :(得分:3)
R中有几个互联网客户端,因此取决于您使用的是什么。
sc
文件不是代理服务器。它只是客户端需要执行的一段JavaScript来计算给定URL所需的代理服务器。所以你的代码肯定是错的。
当需要不同的代理服务器来连接不同的主机(例如,特殊的Intranet代理)时,公司会使用pac
。如果你的pac文件看看发生了什么,请查看源代码。 pac
包在curl
函数中实现了一个实际的PAC客户端。因此,您可以将其包装为自动查找并设置卷曲句柄的正确代理(另请参阅blog):
ie_get_proxy_for_url()
然后像这样使用它:
curl_with_proxy <- function(url, verbose = TRUE){
proxy <- ie_get_proxy_for_url(url)
h <- new_handle(verbose = verbose, proxy = proxy)
curl(url, handle = h)
}
如果结果是con <- curl_with_proxy("https://httpbin.org/get")
readLines(con)
文件只是为您可能在环境变量中设置的任何网址返回pac
,但这仅适用于基于proxy.<my.domain>:8080
的客户端:
libcurl
如果无法使用,请在this github issue中说明您的问题。也许您的案例可以帮助我们改进Sys.setenv(http_proxy_user = "userid:password")
Sys.setenv(http_proxy = "proxy.<my.domain>:8080")
包的这一部分。