$ echo $http_proxy
http://my.proxy.com
$ curl -v http://files.com/a.txt
* About to connect() to proxy my.proxy.com
# Correct downloading
$ sudo echo $http_proxy
http://my.proxy.com
$sudo curl -v http://files.com/a.txt
# Hanging.
最后一个命令不使用代理。为什么?
$su
$curl -v http://files.com/a.txt
也正常工作。
答案1
这并没有达到你想象的效果:
sudo echo $http_proxy
随之而来的$http_proxy
是外壳的扩展前 sudo
被调用,因此它会选择你自己的环境。
普通的su
(没有-
、-l
或--login
)也会保持(大部分)环境完好无损,因此代理设置会被继承。
sudo
默认情况下不保留环境。您可以尝试以下任一操作:
sudo -E curl ...
(为了保护整个环境,如果你可以这样做),或者
sudo http_proxy=$http_proxy curl ...
仅传递http_proxy
(更安全)。
答案2
指定主机为:
- 命令行参数(-x)
- 在命令行上(var=moo 命令)
- 或者将其导出到您的环境
$ curl http://icanhazip.com/ -x http://87-98-136-60.ovh.net:80
87.98.136.60
$ curl http://icanhazip.com/
84.202.82.63
$ http_proxy=http://87-98-136-60.ovh.net:80 curl http://icanhazip.com/
87.98.136.60
$ http_proxy=http://87-98-136-60.ovh.net:80; curl http://icanhazip.com/
84.202.82.63
$ export http_proxy=http://87-98-136-60.ovh.net:80; curl http://icanhazip.com/
87.98.136.60
$ http_proxy=http://87-98-136-60.ovh.net:80; sudo curl http://icanhazip.com/
84.202.82.63
$ export http_proxy=http://87-98-136-60.ovh.net:80; sudo -E curl http://icanhazip.com/