【问题标题】:How to tell R to use proxy auto config script (PAC) in Windows如何告诉 R 在 Windows 中使用代理自动配置脚本 (PAC)
【发布时间】:2015-11-05 07:20:22
【问题描述】:

我无法使用 R 函数连接到 Internet 上的另一个 URL(例如 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 有什么建议吗?

【问题讨论】:

  • 我不确定这是否是你所追求的,但我通常这样设置我的代理:library(httr); set_config(use_proxy(url = "http://yourproxy", port = proxy_port_number))
  • 不,那没用。我认为这适用于直接代理,即在 Windows 的 LAN 设置下选择“使用代理服务器 ...”而不是选择“使用自动配置脚本”,这是我的情况。
  • 你能把curl::ie_proxy_info()curl::ie_get_proxy_for_url()的结果贴出来吗?
  • for ie_proxy_info $AutoDetect [1] FALSE $AutoConfigUrl [1] "proxypac.<my.domain>/proxy.pac" $Proxy NULL $ProxyBypass NULL
  • for ie_get_proxy_for_url "proxy.:8080"

标签: r proxy


【解决方案1】:

R 中有几个可用的 Internet 客户端,因此这取决于您使用的是什么。

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 文件只为您可以在环境变量中设置的任何 URL 返回proxy.&lt;my.domain&gt;:8080,但这仅适用于基于libcurl 的客户端:

Sys.setenv(http_proxy_user = "userid:password")
Sys.setenv(http_proxy = "proxy.<my.domain>:8080")

如果您不能让它工作,请在this github issue 中描述您的问题。也许您的案例可以帮助我们改进curl 包的这一部分。

【讨论】:

  • 谢谢@Jeroen。如何找出我的 R 使用的 Internet 客户端?当我尝试你的建议时,proxy &lt;- ie_get_proxy_for_url(url) 抛出了一个错误Error in ie_get_proxy_for_url(url) : ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT 我应该在这一点上将上述内容添加到 github 问题中,还是我们应该先在这里尝试更多的东西?
  • 可能会移到 github。你能测试来自ie_proxy_info()$AutoConfigUrl的url是否真的有效吗?
  • 是的,它返回浏览器配置中列出的PAC名称(即"http://myproxypac.mydomain/proxy.pac"
  • 我的错,我在url 中有一个格式错误的值,因此出现了较早的错误;您的答案现在完美无缺。谢谢!
猜你喜欢
  • 2018-07-01
  • 2015-09-17
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 2012-06-11
  • 2020-02-22
相关资源
最近更新 更多