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

sha*_*p00 5 rest powershell

以下在我的机器上工作正常,不使用Web代理.

return Invoke-RestMethod 
   -Uri $server$url 
   -ContentType $contentType 
   -Headers $headers 
   -Method $method 
   -UseDefaultCredentials 
Run Code Online (Sandbox Code Playgroud)

注意:这$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
Run Code Online (Sandbox Code Playgroud)

但是-Proxy参数期望URI不是IWebProxy对象.

sha*_*p00 9

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

$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
}
Run Code Online (Sandbox Code Playgroud)


noh*_*wnd 5

编辑:一旦不正确的地址提供不再作品和返回地址提供的代理地址而不是命令。不要使用:使用中的代码片断这个,我能够从PowerShell中检索代理URI作为这样的:

[System.Net.WebRequest]::DefaultWebProxy.GetProxy([uri]("http://www.google.com"))
Run Code Online (Sandbox Code Playgroud)

改用这个:

[System.Net.WebRequest]::GetSystemWebProxy().GetProxy("http://www.google.com")
Run Code Online (Sandbox Code Playgroud)

当 uri 无效时,它仍然返回提供的 URI(或抛出),但是一旦提供了正确的 uri,它就会重新开始工作。