use*_*851 27 proxy powershell-2.0
我似乎无法使用Powershell访问网页.我一直得到"(407)代理身份验证要求".我尝试了很多东西.我不知道代理是什么或它需要什么样的身份验证.我唯一可以访问的是IE,它使用脚本进行配置.我尝试使用一些IP,但没有运气.有任何想法吗?
这是我尝试过的一个例子:
$wc = New-Object System.Net.WebClient
$wc.Headers.Add("User-Agent","Mozilla/4.0+")
$wc.Proxy = [System.Net.WebRequest]::DefaultWebProxy
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$wc.DownloadString("http://stackoverflow.com")
Run Code Online (Sandbox Code Playgroud)
小智 58
我有一个类似的问题,只用两行powershell解决了它:
$browser = New-Object System.Net.WebClient
$browser.Proxy.Credentials =[System.Net.CredentialCache]::DefaultNetworkCredentials
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
Dan*_*dré 15
我没有看到有人做过这样的事情,但有一种方法可以在你的Powershell脚本中做一个"全局设置"(我记得在本地开发构建之前用C#做这个).
[System.Net.WebRequest]::DefaultWebProxy = [System.Net.WebRequest]::GetSystemWebProxy()
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
Run Code Online (Sandbox Code Playgroud)
这样,如果您不想使用代理详细信息更新所有WebClient,则可以覆盖全局设置(每次运行脚本时都必须这样做).但这假定Windows用户中记录的当前值对系统定义的代理服务器有效.
注意:我会说这只是一种快速而肮脏的方法,可以让PS脚本工作之前没有代理知道(比如Cake build).
我知道这个问题专门针对 Powershell 2.0,但我想分享有关在 Powershell Core (6+) 中设置代理服务器的信息,因为在其他地方很难找到它。
\n我同意 Dandr\xc3\xa9 的观点,最好的解决方案是配置默认代理服务器。我刚刚遇到了 Powershell Core (7.1) 的问题。我正在尝试 Dandr\xc3\xa9 的建议,但没有任何效果。经过几个小时的研究和调查,我发现 Powershell Core 可能不再用于System.Net.WebRequest发出 Web 请求,而是System.Net.Nett.HttpClient.
当我配置了HttpClient默认代理服务器后Invoke-WebRequest,Powershell( 、PowerShellGet Find-Module、等)建立的所有 Web 连接Install-Module终于开始工作。
如果您需要使配置永久化,只需将以下命令添加到您的 Powershell 配置文件中即可。
\n[System.Net.Http.HttpClient]::DefaultProxy = New-Object System.Net.WebProxy(\'http://your-proxy\')\nRun Code Online (Sandbox Code Playgroud)\n如果需要设置特定端口,请将其添加到代理服务器 URI:http://proxy:1234。
如果它是身份验证代理,您需要设置用于代理身份验证的凭据。使用以下命令设置您当前登录 Windows 的域帐户的凭据:
\n[System.Net.Http.HttpClient]::DefaultProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials\nRun Code Online (Sandbox Code Playgroud)\n如果您需要不同的凭据,可以使用 cmdlet Get-Credential,但它是交互式的,因此它不是 Powershell 配置文件中的理想解决方案。但我确信还有其他方法。
[System.Net.Http.HttpClient]::DefaultProxy.Credentials = Get-Credential\nRun Code Online (Sandbox Code Playgroud)\n如果您只需要绕过代理服务器并使用直接连接,但 Powershell 使用默认的系统范围代理服务器,只需将HttpClient\ 的默认代理设置为null:
[System.Net.Http.HttpClient]::DefaultProxy = New-Object System.Net.WebProxy($null)\nRun Code Online (Sandbox Code Playgroud)\n要使配置永久化,只需将所需的命令添加到Powershell 配置文件中即可。其中有四个(所有用户,所有主机;所有用户,当前主机;当前用户,所有主机;当前用户,当前主机),但我会使用“当前用户,所有主机”。要查找特定配置文件的位置,请使用$Profile带有配置文件名称的变量:
$Profile.CurrentUserAllHosts\nRun Code Online (Sandbox Code Playgroud)\n它应该打印路径$Home\\Documents\\Powershell\\profile.ps1。
如果配置文件尚不存在,只需创建它并将配置放在那里。每次执行新的 Powershell Core ( pwsh.exe) 实例时都会执行它。
另一种解决方案是使用环境变量。根据文档,HttpClient实际上是使用以下变量来初始化默认代理(如果定义了它们):
HTTP_PROXY对于 HTTP 请求HTTPS_PROXY对于 HTTPS 请求ALL_PROXY适用于 HTTP 和 HTTPSNO_PROXY可能包含从代理中排除的主机名的逗号分隔列表用法示例:
\nALL_PROXY=\'http://proxy:1234\'\nRun Code Online (Sandbox Code Playgroud)\n如果您需要传递凭据:
\nALL_PROXY=\'http://username:password@proxy:1234\'\nRun Code Online (Sandbox Code Playgroud)\n该解决方案受到更广泛的应用程序的支持,因此它比以前的解决方案更好还是更差取决于您到底要配置什么,只是 Powershell 还是其他应用程序。
\n如果代理回答“ 407”,“需要代理身份验证”,则需要身份验证:
$Username="Hugo"
$Password="abcdefgh"
$WebProxy = New-Object System.Net.WebProxy("http://webproxy:8080",$true)
$url="http://aaa.bbb.ccc.ddd/rss.xml"
$WebClient = New-Object net.webclient
$WebClient.Proxy=$webproxy
$WebClient.proxy.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
$path="C:\Users\hugo\xml\test.xml"
$WebClient.DownloadFile($url, $path)
Run Code Online (Sandbox Code Playgroud)
内容现在位于“ test.xml”中
如果您知道该脚本 - 只需下载它,用记事本打开并找到代理服务器的 IP 和端口。至于身份验证 - 最有可能使用您的 Windows 凭据,因此理论上您应该能够将其保留为空,除非脚本中存在可疑内容。
| 归档时间: |
|
| 查看次数: |
71455 次 |
| 最近记录: |