如何让 curl 自动使用代理

如何让 curl 自动使用代理

今天我配置了我公司的电脑来设置代理,并且它起作用了,因为我可以wget通过代理访问网页。

我所做的是设置http_proxyhttps_proxyftp_proxy~/.bashrc和中~/.wgetrc

然而,当我尝试时curl www.google.fr,它被阻止并且超时。

curl --proxy $http_proxy www.google.fr按预期工作。

是否可以curl自动使用代理?

答案1

也许让 curl 使用代理的最简单方法是将详细信息添加到~/.curlrc文件中。语法如下:

proxy = <proxy_host>:<proxy_port>

这个可以或者被设置为环境变量,但恕我直言,使用~/.curlrc是最直接且最不容易出错的方法。

答案2

有些代理需要设置特定的身份验证标头,因此也要注意这些。 在我的例子中,它--proxy-ntlm如下例所示:

curl -x webproxy.net:8080 -U 用户名:密码http://google.com--proxy-ntlm

但还有其他选择:

--proxy-digest--proxy-negotiate

最后,cURL 有一个超级友好的文档页面,所以请务必查看一下。

答案3

客户端(自然地)使用底层的curl库。libcurl

在代理上下文中libcurl api 文档除其他外,还指出:

环境变量

libcurl 尊重名为 http_proxy、ftp_proxy、sftp_proxy 等的代理环境变量。如果设置,libcurl 将为该 URL 方案使用指定的代理。因此对于“FTP://”URL,将考虑 ftp_proxy。如果未设置协议特定的代理,则使用 all_proxy。

如果设置了 no_proxy(或 NO_PROXY),则它与设置 CURLOPT_NOPROXY 选项完全相同。

CURLOPT_PROXY 和 CURLOPT_NOPROXY 选项会覆盖环境变量。

因此,如果您相应地设置环境变量,libcurl则将curl选择它。任何明确设置的代理(例如在.curlrc或通过--proxycmdline 参数)都会覆盖环境变量设置。

相关内容