Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Invoke RestMethod使用默认的web代理?_Rest_Powershell - Fatal编程技术网

如何使Invoke RestMethod使用默认的web代理?

如何使Invoke RestMethod使用默认的web代理?,rest,powershell,Rest,Powershell,在我不使用web代理的机器上,以下操作可以正常工作 return Invoke-RestMethod -Uri $server$url -ContentType $contentType -Headers $headers -Method $method -UseDefaultCredentials 注意:$server$url是一个https地址,类似于https://somewhere.example.com/api/data 现在我正试图让它在公

在我不使用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
对象。

编辑:一旦提供了不正确的地址,命令将不再工作,并返回提供的地址而不是代理地址。。 请勿使用此选项: 使用中的代码片段,我能够从PowerShell中检索代理uri,如下所示:

[System.Net.WebRequest]::DefaultWebProxy.GetProxy([uri]("http://www.google.com"))
改用这个:

[System.Net.WebRequest]::GetSystemWebProxy().GetProxy("http://www.google.com")

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

接受的答案让我开始工作。这是完整的版本

$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
}

隐马尔可夫模型。。。在我的例子中,URL是一个https地址。然后
GetSystemWebProxy().GetProxy()
返回ServicePointManager不支持https方案的代理。由于某些原因,在运行此命令后
[System.Net.WebRequest]::GetSystemWebProxy().GetProxy(“https://www.google.com“
我的原始代码重新开始工作。在我的特定情况下,我所做的只是添加参数
-UseDefaultCredentials
,然后进行宾果游戏。