wget没有使用基于环境变量的代理设置

tir*_*011 3 windows powershell proxy wget nano-server

我有一个Windows nano服务器,并尝试设置代理设置.nano服务器仅在命令模式下没有GUI.我在PowerShell中运行

netsh winhttp set proxy proxy-server="ipadress:8080"
Run Code Online (Sandbox Code Playgroud)

然后我有

ping www.google.de 
Run Code Online (Sandbox Code Playgroud)

并且显示了谷歌的IP地址,因此存在一些连接.但是当我试着奔跑的时候

wget www.google.de 
Run Code Online (Sandbox Code Playgroud)

我明白了

"Unable to connect to the remote server"
Run Code Online (Sandbox Code Playgroud)

然后我在PowerShell环境中设置了代理

set http_proxy="ipadress:8080" and https_proxy...
Run Code Online (Sandbox Code Playgroud)

但同样的问题.当我使用代理设置直接调用wget时,它可以工作:

wget 'http://www.google.de' -Proxy http://ipadress:8080
Run Code Online (Sandbox Code Playgroud)

如何才能wget使用全局代理设置?或者设置没有正确设置?或者需要我安装一些Windows功能,它是否正常工作?

wget用来测试连接以后任何程序的Web请求应该工作.

Mat*_*att 7

非常确定您的问题是您没有设置环境变量并且在cmd exe和PowerShell cmdlet之间混淆.当我们从(我希望是)关于代理信息的wget文档中读到:

Wget识别的指定代理位置的标准方法是使用以下环境变量:

  • HTTP_PROXY
  • https_proxy

这正是你在这里尝试做的,这是一个成功的操作(没有错误),但没有按预期工作.

set http_proxy="ipadress:8080"
Run Code Online (Sandbox Code Playgroud)

问题是如果你在PowerShell中运行它set是别名Set-Variable.见Get-Alias set.

PS C:\Users\matt> Get-Variable http*

Name                           Value                                                                                        
----                           -----                                                                                        
http_proxy=ipadress:8080     
Run Code Online (Sandbox Code Playgroud)

您也遇到了问题,wget因为它是别名Invoke-WebRequest.如果您至少拥有PowerShell 3.0版,那只会是一个问题.在您的工作示例中,您使用的是cmdlet语法(-Proxy ...).

在这两种情况下(set和非工作wget)命令都是模棱两可的,PowerShell必须尝试将它与某些东西相匹配....

所以我们在这里看到的是about_Command_Precedence即将发挥作用

如果未指定路径,Windows PowerShell在运行命令时将使用以下优先顺序:

  1. 别号
  2. 功能
  3. 小命令
  4. 本机Windows命令

本机Windows命令是列表中的最后一个!实际上,如果您在PowerShell中执行此操作,您可以使用PowerShell cmdlet来设置环境变量(如果您坚持使用wget).我唯一不确定的是你应该使用哪一种方法,不应该坚持第二种方法是永久性的会话.当然,如果你想在会话之间将这些设置保存在计算机上,那么第一个就足够了但是使用第二个.

  1. $env:http_proxy = "ipaddress:8080"
  2. [Environment]::SetEnvironmentVariable("http_proxy", "ipaddress:8080", "Machine")

您可以从TechNet上阅读更多相关信息.还要注意你的"地址"的拼写


如果你打算使用CMD公用事业确保您将追加.exe和如果不指定到资源的完整路径,然后确保它的目录是PATH环境变量的一部分.