今天我配置了我公司的电脑来设置代理,并且它起作用了,因为我可以wget
通过代理访问网页。
我所做的是设置http_proxy
,https_proxy
并ftp_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
或通过--proxy
cmdline 参数)都会覆盖环境变量设置。