我无法使用连接到互联网上另一个 URL 的 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 有建议吗?
最佳答案
R 中有多个可用的互联网客户端,因此这取决于您使用的是什么。
一个pac
文件不是代理服务器。它只是客户端需要执行的一段 JavaScript 来计算给定 URL 所需的代理服务器。所以你上面的代码肯定是错误的。
公司使用 pac
当需要不同的代理服务器连接不同的主机时(例如特殊的内网代理)。如果您的 pac 文件查看源代码,看看发生了什么。 curl
包在 ie_get_proxy_for_url()
中实现了一个实际的 PAC 客户端。功能。因此,您可以将其包装起来以自动查找并设置正确的 curl 句柄代理(另请参阅 blog ):
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
对于您可以在环境变量中设置的任何 URL,但这仅适用于 libcurl
基础客户:
Sys.setenv(http_proxy_user = "userid:password")
Sys.setenv(http_proxy = "proxy.<my.domain>:8080")
如果您无法让它工作,请在 this github issue 中描述您的问题。也许您的案例可以帮助我们改进curl
的这一部分包。
关于r - 如何告诉 R 在 Windows 中使用代理自动配置脚本 (PAC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33538695/