以下在我的机器上运行良好,不使用Web代理。
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文件定义的公司代理。我已经确认我可以从Internet Explorer获取$server$url
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
对象。
答案 0 :(得分:8)
接受的答案让我开始了。这是完整版
$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
}
答案 1 :(得分:3)
编辑:一旦提供了错误的地址,该命令将不再起作用并返回提供的地址而不是代理地址。 不要用这个: 使用this中的代码段,我可以从PowerShell中检索代理uri:
[System.Net.WebRequest]::DefaultWebProxy.GetProxy([uri]("http://www.google.com"))
请改用:
[System.Net.WebRequest]::GetSystemWebProxy().GetProxy("http://www.google.com")
当uri无效时,它仍会返回提供的URI(或抛出),但是一旦提供了正确的uri,它就会重新开始工作。