How can I make Invoke-RestMethod use the default web proxy?
Solution 1
Edit: Once incorrect address is provided the command no longer works and returns the address provided instead of the proxy address.. Do not use this: Using the code snippet in this, I am able to retrieve the proxy uri from PowerShell as such:
[System.Net.WebRequest]::DefaultWebProxy.GetProxy([uri]("http://www.google.com"))
Use this instead:
[System.Net.WebRequest]::GetSystemWebProxy().GetProxy("http://www.google.com")
It still returns the provided URI (or throws) when the uri is invalid, but once correct uri is provided is starts working again.
Solution 2
The accepted answer got me started. Here's the full version
$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
}
shamp00
Founder and director of ZeroSharp, a software development company in London. Senior developer for Coprocess, a Switzerland-based company specialised in providing corporate treasury software. DevExpress MVP since 2012. Cognitive science postgraduate researching analogy.
Updated on December 25, 2020Comments
-
shamp00 over 3 years
The following works fine on my machine which does not use a web proxy.
return Invoke-RestMethod -Uri $server$url -ContentType $contentType -Headers $headers -Method $method -UseDefaultCredentials
Note: the
$server$url
is an https address, something like https://somewhere.example.com/api/dataNow I'm trying to get it to work in a corporate environment but I am getting a 401 error.
I think this is because there is a corporate proxy which is defined with a proxy.pac file. I have confirmed I can get to the
$server$url
URI from Internet Explorer. What do I need to do to get theInvoke-RestMethod
command to work using the same settings?I have tried adding the
-proxy
parameter$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
but the -Proxy parameter is expecting a URI not an
IWebProxy
object.