rest - 如何让 Invoke-RestMethod 使用默认的 Web 代理?

标签 rest powershell

以下在我不使用网络代理的机器上工作正常。

return Invoke-RestMethod 
   -Uri $server$url 
   -ContentType $contentType 
   -Headers $headers 
   -Method $method 
   -UseDefaultCredentials 

注:$server$url是一个 https 地址,类似于 https://somewhere.example.com/api/data

现在我试图让它在公司环境中工作,但我收到了 401 错误。

我认为这是因为有一个使用 proxy.pac 文件定义的公司代理。我已经确认我可以到达 $server$url来自 Internet Explorer 的 URI。我需要做什么才能获得 Invoke-RestMethod命令使用相同的设置工作?

我试过添加 -proxy范围
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

return Invoke-RestMethod 
    -Uri $server$url 
    -ContentType $contentType 
    -Headers $headers 
    -Method $method 
    -UseDefaultCredentials 
    -Proxy $proxy 
    -ProxyUseDefaultCredentials

但是 -Proxy 参数需要一个 URI 而不是 IWebProxy目的。

最佳答案

接受的答案让我开始了。这是完整版

$headers = @{"X-My-ApiKey"=$apiKey}
$contentType = "application/json"

$proxyUri = [Uri]$null
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
if ($proxy)
{
    $proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
    $proxyUri = $proxy.GetProxy("$server$url")
}

if ("$proxyUri" -ne "$server$url")
{
    Write-Host "Using proxy: $proxyUri"
    return Invoke-RestMethod -Uri $server$url -ContentType $contentType -Headers $headers -Method $method -UseDefaultCredentials -Proxy $proxyUri -ProxyUseDefaultCredentials
}
else
{
    return Invoke-RestMethod -Uri $server$url -ContentType $contentType -Headers $headers -Method $method -UseDefaultCredentials
}

关于rest - 如何让 Invoke-RestMethod 使用默认的 Web 代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471486/

相关文章:

java - Spring MVC - 仅允许来自本地主机的请求到特定 Controller

rest - JAX-RS 通用响应和接口(interface)代理

mysql - 通过PowerShell远程连接连接到MySQL

powershell - Powershell中的原型(prototype)继承?

powershell - 如何使用 PowerShell 从任务计划程序中删除文件夹?

node.js - 保护 Node.js RESTful API 的安全

rest - 网站 API 的黄金标准是什么?推特、Flickr、 Facebook 等

java - jersey 如何在一个资源中创建静态成员

c# - 从 Powershell 调用的 DLL 使用相对于 Powershell 安装目录的路径。我怎样才能将它设置为其他东西?