如何告诉R在Windows中使用代理自动配置脚本(PAC)

时间:2015-11-05 07:20:22

标签: r proxy

我无法使用连接到互联网上其他网址的R功能(例如read_htmlurl.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的建议吗?

1 个答案:

答案 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") 包的这一部分。