嗨,我在Powershell v4中运行以下"Invoke-RestMethed"命令,但它抛出了HTTP 406错误。
Invoke-RestMethod -Method Post -Uri $url -Headers $head -ContentType "application/xml" -Body $body -OutFile output.txt
我对标题进行了以下更改:
$head = @{"Authorization"="Basic $auth"; "Accept"="*/*"}
我的理解是服务器以 xml 格式接收请求,但以 JSON 格式返回,也许这导致了问题?我确实尝试将标题更改为"接受"="应用程序/json",但收到相同的错误。
完全错误:
Invoke-RestMethod : HTTP Status 406 - 类型 状态报告 消息 说明 此请求标识的资源只能生成具有不可接受特征的响应 根据请求"接受"标头。
StackOverflow中有一个漂亮的功能来解决这个问题。这是链接:执行请求
这应该可以帮助您:
Function Execute-Request()
{
Param(
[Parameter(Mandatory=$True)]
[string]$Url,
[Parameter(Mandatory=$False)]
[System.Net.ICredentials]$Credentials,
[Parameter(Mandatory=$False)]
[bool]$UseDefaultCredentials = $True,
[Parameter(Mandatory=$False)]
[Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get,
[Parameter(Mandatory=$False)]
[Hashtable]$Header,
[Parameter(Mandatory=$False)]
[string]$ContentType
)
$client = New-Object System.Net.WebClient
if($Credentials) {
$client.Credentials = $Credentials
}
elseif($UseDefaultCredentials){
$client.Credentials = [System.Net.CredentialCache]::DefaultCredentials
}
if($ContentType) {
$client.Headers.Add("Content-Type", $ContentType)
}
if($Header) {
$Header.Keys | % { $client.Headers.Add($_, $Header.Item($_)) }
}
$data = $client.DownloadString($Url)
$client.Dispose()
return $data
}
用法:
Execute-Request -Url "https://URL/ticket" -UseDefaultCredentials $true
Execute-Request -Url "https://URL/ticket" -Credentials $credentials -Header @{"Accept" = "application/json"} -ContentType "application/json"