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

时间:2016-03-11 13:34:59

标签: windows powershell proxy wget nano-server

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

netsh winhttp set proxy proxy-server="ipadress:8080"

然后我

ping www.google.de 

显示了谷歌的IP地址,因此有一些连接。但是当我试图运行时

wget www.google.de 

我得到了

"Unable to connect to the remote server"

然后我在PowerShell环境中使用

设置了代理
set http_proxy="ipadress:8080" and https_proxy...

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

wget 'http://www.google.de' -Proxy http://ipadress:8080

如何让wget使用全局代理设置?或者设置没有正确设置?或者我需要安装一些Windows功能,它有效吗?

我稍后使用wget测试连接,任何程序的Web请求都应该有效。

2 个答案:

答案 0 :(得分:6)

非常确定您的问题是您没有设置环境变量并且在cmd exe和PowerShell cmdlet之间混淆。正如我们从{我希望的那样)中读到documentation for wget concerning proxy information

  

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

     
      
  • HTTP_PROXY
  •   
  • https_proxy
  •   

这正是您在此尝试做的,这是一次成功的操作(没有错误),但没有按预期工作。

set http_proxy="ipadress:8080"

问题是如果你在PowerShell中运行setSet-Variable的别名。见Get-Alias set

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

Name                           Value                                                                                        
----                           -----                                                                                        
http_proxy=ipadress:8080     

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

在这两种情况下(set和非工作wget)命令都不明确,而PowerShell必须尝试将其与某些东西相匹配....

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

  

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

     
      
  1. 别名
  2.   
  3. 功能
  4.   
  5. Cmdlet
  6.   
  7. 原生Windows命令
  8.   

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

  1. $env:http_proxy = "ipaddress:8080"
  2. [Environment]::SetEnvironmentVariable("http_proxy", "ipaddress:8080", "Machine")
  3. 您可以阅读more on this from TechNet。另请注意#34;地址"

    的拼写

    如果您要使用cmd实用程序,请确保附加.exe,如果您没有指定资源的完整路径,请确保其目录是路径环境变量的一部分。

答案 1 :(得分:0)

powershell命令行开关的问题wget什么是Invoke-WebRequest的快捷方式无法与需要身份验证的代理一起使用。它不是唯一不与代理一起工作的命令行开关。最简单的方法是使用 cntlm

设置代理并将其用作代理,它正在运行。