R 的 curl 包使用 libcurl。因此,即使 curl_fetch_memory 的调用里没有代理参数,进程环境中的代理也可能生效:

Sys.setenv(ALL_PROXY = "http://proxy.example:8080")
result <- curl::curl_fetch_memory("https://www.example.org/")

请在准备请求之前设置环境。使用完整的端点,包括预期的 scheme 和 port,而不要假设只有主机名就代表正确的协议。对于获准访问公开站点的请求,HTTP 代理列表可为示例中的 HTTP 代理 URL 提供候选。

ALL_PROXY 是兜底路径。目标协议对应的代理环境变量会优先,匹配的 NO_PROXY 绕过规则仍可能选择直连。当修改 ALL_PROXY 看起来没有效果时,检查这些值。

对于只属于某个 handle 的路径,请显式配置:

handle <- curl::new_handle(proxy = "http://proxy.example:8080")
result <- curl::curl_fetch_memory(
  "https://www.example.org/", handle = handle
)

handle 的代理选项会覆盖环境中的代理选择;绕过策略仍然相关。显式留空的代理选项会禁用代理,即使存在代理环境变量。

这些设置影响正在运行的 R 进程和 curl 的请求。启动另一个 R 会话,或使用采用其他网络实现的包,可能得到不同的路径。

相关文章