Powershell v5.1调用RestMethod并绕过代理



我目前使用Powershell V5.1,希望通过Invoke-RestMethod命令绕过Internet Explorer代理。

在Powershell V6中,有-NoProxy选项,指示cmdlet不会使用代理到达目标。这是为了绕过在Internet Explorer中配置的代理,这正是我想要做的

在Powershell V6中,代码类似于:

$Result = Invoke-RestMethod -Uri $url  -NoProxy

V5.1中有解决方法吗?

谢谢,Philippe

我知道这是相当古老的,但由于我也喜欢有好的解决方案,我将把我的解决方案发布到这个线程中。我实际上使用了这个,它非常完美(也用于InvokeWebRequest(:

$Proxy=New-object System.Net.WebProxy
$WebSession=new-object Microsoft.PowerShell.Commands.WebRequestSession
$WebSession.Proxy=$Proxy
$Antwort=Invoke-RestMethod -Method Post -Uri "https://thisismyrestsite" -Body $BodyJson -WebSession $WebSession

也许这对其他人有帮助,因为到目前为止我还没有在网上找到好的解决方案。如果有人需要特殊的代理设置,我相信他也可以用值填充$Proxy,这可能允许比Invoke-RestMethod或InvokeWebRequest更多的设置。编辑:请记住,这仅适用于5.1。对于Core,请使用-NoProxy Switch!

作为一种选择,但我认为postanote有一个很好的答案。上网怎么样?而且现在比一般情况下要深入一个层次,所以不要使用WebRequest来使用.net的HttpClient:

$request = [System.Net.WebRequest]::Create("https://www.example.org")
$request.Proxy = [System.Net.WebProxy]::new() #blank proxy
$response = $request.GetResponse()
$response

如果绕过代理,我还没有进行过广泛的测试(我的公司政策会让测试变得棘手(,但这个c#问题建议它应该这样做:如何从WebRequest中删除代理并保持DefaultWebProxy不变

当然,你可能会失去PowerShell中的一些管道功能,但你可以很容易地包装它,如果你在重负载下使用它,要小心套接字的使用。

不是本机的,因为这些都是PSCore web cmdlet中的一些改进,MS已经声明不会进行任何后端口。您只需从PS5x向PSCore发送命令即可按原样使用cmdlet。

使用以下函数对InvokeWebRequest执行了类似的操作:

更新代理.ps1

根据本问答;

调用WebRequest代理绕过

$p = proxy
$p.Override += "*.domain.com" 
$p | proxy
Invoke-WebRequest ...
#you could return old override here.

因此,它可能与Invoke-RestMethod一起工作,但我不在测试它的位置。

因此,以下是我非常成功地实现的解决方法:

web请求的末尾通常会被您查询的网站忽略(请测试,但这通常是真的(。因此,我在URL的末尾随机添加了一些内容:时间戳。

代理每次都认为这是一个新的查询,因此不会发生缓存。

$timestamp = (Get-Date -Date ((Get-Date).ToUniversalTime()) -UFormat %s)
$url = "https://www.example.org/$timestamp"
$Result = Invoke-RestMethod -Uri $url

对我来说效果很好!!!

最新更新