4

我目前在 Powershell V5.1 中,想在 Invoke-RestMethod 命令上绕过 Internet Explorer 代理。

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

在 Powershell V6 中,代码类似于:

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

V5.1 中的任何解决方法?

谢谢,菲利普

4

4 回答 4

4

我知道这已经很老了,但是因为我也喜欢有好的解决方案,所以我会将我的解决方案发布到这个帖子上。我实际上使用了它并且它工作得很好(也适用于 Invoke-WebRequest):

    $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 或 Invoke-WebRequest 更多的设置。编辑:请记住,这仅适用于 5.1。对于核心,使用 -NoProxy 开关!

于 2021-02-24T06:14:06.630 回答
2

作为替代方案,但我认为 postanote 有一个很好的答案。浸入.net怎么样?并且比现在更深层次,所以不要使用 .net 的 HttpClient 使用 WebRequest:

$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 中失去一些流水线魔法,但你可以很容易地包装它,如果你在重负载下使用它,请注意套接字的使用。

于 2018-11-26T23:42:03.803 回答
1

不是本机的,因为这些是一些改进,在 PSCore web cmdlet 中,MS 已经声明不会向后移植任何内容。您可以直接从 PS5x 转到 PSCore 以按原样使用 cmdlet。

使用此函数为 Invoke-WebRequest 完成了类似的操作:

更新代理.ps1

根据这个问答

Invoke-WebRequest 代理绕过

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

因此,它可能与 Invoke-RestMethod 一起使用,但我不在一个位置进行测试。

于 2018-11-25T04:41:27.387 回答
-2

因此,这是我非常成功地实施的解决方法:

您查询的站点通常会忽略 Web 请求的结束(请测试,但通常情况下确实如此)。因此,我在 URL 的末尾添加了一些随机的东西:时间戳。

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

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

在我的情况下效果很好!

于 2018-11-29T00:04:46.620 回答