如何使用默认的 Web 代理设置在 R 中配置 curl 包?

djb*_*b72 7 curl r http-proxy xml2

我在商业环境中使用 R,其中外部连接全部通过 Web 代理进行,因此我们需要指定代理服务器地址并确保我们使用 Windows 身份验证连接到它。

我已经有了将 RCurl 和 httr 包配置为默认使用这些设置的代码 - 即

httr::set_config(config(
  proxy = "my.proxy.address", 
  proxyuserpwd = ":", 
  proxyauth = 4
   ))
Run Code Online (Sandbox Code Playgroud)

或者

opts <- list(
  proxy = "my.proxy.address",
  proxyuserpwd = ":", 
  proxyauth = 4
)
RCurl::options(RCurlOptions = opts)
Run Code Online (Sandbox Code Playgroud)

但是,在最近的几个案例中,我发现依赖curl包来发出 Web 请求的包 - 例如xml2::read_xml- 我找不到任何方法来设置相同的代理选项,因此默认情况下它们会被选中并由 curl 使用。

如果我自己直接使用 curl,我可以在新句柄上设置选项,以下代码足以成功工作:

  h = new_handle(proxy = "my.proxy.address",
                 proxyuserpwd = ":")
  con = curl(url,handle = h)
  page = xml2::read_xml(con)
Run Code Online (Sandbox Code Playgroud)

...但是当 curl 的使用被埋在其他人的功能中时,这没有任何帮助!

或者,我知道我可以为代理地址设置一个环境变量,如下所示:

Sys.setenv(https_proxy = "https://my.proxy.address")
Run Code Online (Sandbox Code Playgroud)

... libcurl 将其捡起。但是,如果我只是这样做,那么最终会出现 HTTP 407 代理身份验证错误。有没有办法指定空白用户名/密码(如 proxyuserpwd 设置那样),以便我们使用 Windows 凭据进行身份验证?似乎也不可能将 proxyauth 选项指定为环境变量。

任何人都可以提供解决方案或任何建议吗?

Sta*_*tan 3

我也有类似的问题。以下是对我有用的步骤:

  1. 下载我公司的代理自动配置文件(PAC 文件)。对于 IE:单击齿轮图标 --> Internet 选项 --> 连接 --> LAN 设置 --> 将 http 地址复制到新的浏览器窗口中以下载文本文件。
  2. 找到 PAC 文件中指定代理的行(例如:“auth-proxy.xxxxxxx.com:9999”)
  3. 在新的 R 会话中,通过使用类似于以下内容的命令临时设置这些代理设置来测试这些代理设置,并替换 PAC 文件中的值:

    Sys.setenv(http_proxy = "auth-proxy.xxxxxxx.com:9999")
    Sys.setenv(https_proxy = "auth-proxy.xxxxxxx.com:9999")
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在同一会话中重新运行代码,看看这些新设置是否可以解决问题。这是我用的测试。

    read_html(curl('http://google.com', handle = curl::new_handle("useragent" = "Mozilla/5.0")))
    
    Run Code Online (Sandbox Code Playgroud)

使用设置代理只会持续到当前Sys.setenv会话结束。要进行更持久的更改,您可以考虑将其添加到您的 中,如此处所述R_PROFILE