为什么 sudo curl 忽略代理设置?

为什么 sudo curl 忽略代理设置?
$ 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/ 

相关内容