2017-03-16 90 views
0

我有一個現有的REST API接受x-www-form-urlencoded。 API需要參數apikey,並在Postman中成功測試,如下所示。Invoke-WebRequest/Invoke-RestMethod失敗,出現底層連接關閉錯誤

enter image description here

不過,我需要使用調用這個API Powershell.Below是我的代碼:

$params = @{"apikey"="abcd1234"} 
Invoke-WebRequest -Uri http://localhost:3030/api/v1/usergroupsync -Method POST -Body $params 
#also tried below, no avail. 
Invoke-RestMethod -Uri http://localhost:3030/api/v1/usergroupsync -Method POST -Body $params 

但是我遇到了這個錯誤:

Invoke-WebRequest : The underlying connection was closed: An unexpected error occured on a receive At line:14 char:1 
+ Invoke-WebRequest -Uri http://localhost:3030/api/v1/usergroupsync -Method POST -... 
+============================================================================== 
    + CategoryInfo : InvalidOperations: (System.Net.HttpWebRequest:HTTTpWebRequest) [Invoke-WebRequest], WebException 
    + FullyQualifiedErrorId : WebcmdletWebResponseException,Microsoft.Powershell.Commands.InvokeWebRequest 

如果我刪除 - 身體,沒有錯誤,並且響應正如預期的那樣「API密鑰無效」,這意味着我的REST API正確驗證。 enter image description here

所以我懷疑如果我的問題是在身體上的原因?任何想法如何解決這個問題?

PS版是4.0.0

PS C:\> $PSVersionTable.PSVersion 

Major Minor Build Revision 
----- ----- ----- -------- 
4  0  -1  -1 

回答

1

您應該使用-Header開關來傳遞你的參數。雖然Invoke-WebRequest支持標題,但我建議使用Invoke-RestMethod,因爲它也會返回標題。

嘗試類似,

Invoke-RestMethod -Method Post -Uri http://localhost:3030/api/v1/usergroupsync -Body (ConvertTo-Json $body) -Header @{"apikey"=$apiKey} 

檢查thisthis更多信息

+0

是的,我已經做了通過移動到頭部的解決辦法,但是我仍然intriqued爲什麼我不能把它傳遞身體? – Rudy

+0

一般來說,頭部可以被某些實體修改(通過http)。意思是,如果需要,代理服務器可以修改你的參數。這可能會帶來更多的亮點:http://softwareengineering.stackexchange.com/q/277343 –

相關問題