以下在我不使用网络代理的机器上工作正常。
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/