我有一个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请求都应该有效。
答案 0 :(得分:6)
非常确定您的问题是您没有设置环境变量并且在cmd exe和PowerShell cmdlet之间混淆。正如我们从{我希望的那样)中读到documentation for wget concerning proxy information:
指定Wget识别的代理位置的标准方法是使用以下环境变量:
- HTTP_PROXY
- https_proxy
这正是您在此尝试做的,这是一次成功的操作(没有错误),但没有按预期工作。
set http_proxy="ipadress:8080"
问题是如果你在PowerShell中运行set
是Set-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在运行命令时使用以下优先顺序:
- 别名
- 功能
- Cmdlet
- 原生Windows命令
醇>
原生Windows命令列表中的最后一个!实际上,如果您在PowerShell中执行此操作,您也可以使用PowerShell cmdlet来设置环境变量(如果您坚持使用wget
)。我唯一不确定的是你应该使用哪一种方法,不应该坚持第二种方法是永久性的会话。当然,如果你想在会话之间将这些设置保存在计算机上,那么第一个就足够了但是使用第二个。
$env:http_proxy = "ipaddress:8080"
[Environment]::SetEnvironmentVariable("http_proxy", "ipaddress:8080", "Machine")
您可以阅读more on this from TechNet。另请注意#34;地址"
的拼写如果您要使用cmd实用程序,请确保附加.exe,如果您没有指定资源的完整路径,请确保其目录是路径环境变量的一部分。
答案 1 :(得分:0)
powershell命令行开关的问题wget什么是Invoke-WebRequest的快捷方式无法与需要身份验证的代理一起使用。它不是唯一不与代理一起工作的命令行开关。最简单的方法是使用 cntlm
设置代理并将其用作代理,它正在运行。