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

标签 r proxy

我无法使用连接到互联网上另一个 URL 的 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 有建议吗?

最佳答案

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/

相关文章:

r - 在多个变量上应用命令时缩短 case_when 语法

.net - F# Odata 服务类型提供者通过 http 代理

vue.js - SPA 有没有办法检查是否有代理并正确处理它?

Mysql Router 向宕机的从节点发送请求一秒

java - J2SE 代理认证

r - 更改直方图标签的大小

r - 你会如何在 R 中完成这个棘手的子集化?

r - 获取作为参数传递给函数的函数名称

r - 如果出错,则在 R 中的 for 循环中进行下一次迭代

python - 使用 urllib2 和 cookielib 在两个 opener 之间共享 cookie