2016-03-02 92 views
0

我試圖在PowerShell中實現ReST請求。如何在PowerShell的進一步請求中保存和使用ReST響應

請求1:

$response = Invoke-RestMethod "my-custom-url" -Headers $headers -Method POST -Body $json -ContentType "application/json" -OutFile output.json -SessionVariable sv 

效應初探從請求1:

{ 
    "@type": "user", 
    "id": "00000703000000000010", 
    "orgId": "000007", 
    "name": "[email protected]", 
} 

我需要保存 「ID」 的值&它添加到下一個請求的報頭。我怎樣才能做到這一點?

----更新 - 添加WriteHost $響應

@{@type=user; id=00000703000000000010; orgId=000007; name=xxx; createTime=2014-08-27T12:12:21.000Z; updateTime=2016-02-27 
T00:40:13.000Z; [email protected]; updatedBy=xxx; sfUsername=ppanigrahi; firstName=Pravakar; lastName=P 
anigrahi; password=********; phone=9008433201; [email protected]; timezone=IST; serverUrl=http://localhost:16006/saas; spiUrl 
=https://localhost:8080/; icSessionId=QpXZEkqYEflJRY7h; securityQuestion=MOTHER_MAIDEN_NAME; forceChangePassword=False; uuid=C1bL60uIQqyRaF3 
nXCHFkA; roles=System.Object[]; usergroups=System.Object[]} 
+0

我嘗試了在請求1中使用SessionVariable參數,但無法獲取id爲 – live2learn

+0

的值與Cookies.GetCookies(url)一起嘗試,但驗證了id的值未存儲在cookie列表中。 – live2learn

+0

請編輯問題並添加您用於提出請求的代碼。 – Cobster

回答

1

由於您正在使用Invoke-RestMethod,響應將是一個包含數據屬性的對象,您可以從$ Response.id中訪問該id。

我不確定您是否想要嘗試將「Id」作爲標頭值或Cookie傳遞(因爲您也指的是會話變量;通常會持續存儲Cookie等) 。

如果你想要的是通過包含領域的自定義標題「ID」你可以做下一個請求之前如下:

$headers.Add("Id",$response.id); 

我假設你已經在事先定義$頭這裏。否則,您可以直接使用$ headers = @ {「Id」= $ response.id};}來創建它。

然後在下一次服務調用時,重複使用您的$ headers變量,就像您已經做的那樣。

如果您真正想要實現的是創建一個cookie並將其添加到您的會話(變量)中,那麼您不必爲每次後續調用重複自己;你應該創建一個cookie,並添加它執行以下操作:

$c=New-Object System.Net.Cookie; 
$c.Name="Id"; 
$c.Path="/" 
$c.Value = $response.Id; 
# Make sure domain and path is matching your backend-server 
$c.Domain = "foobar.com"; 
# Add cookie to your websession 
$sv.Cookies.Add($c); 

這將創建一個cookie並把它添加到您的websession(如果$ SV是在您的會話)。如果你沒有webrequest會話(在你的情況下是$ sv),你可以使用$ sv = New-Object Microsoft.PowerShell.Commands.WebRequestSession;

+0

嘗試相同,但不成功。它給了403禁止的錯誤。我也嘗試使用 - Write-Host $ response.id打印Id的值。但是這不會打印任何東西。 – live2learn

+0

你能打印一個例子嗎?如果你寫-host $ response.id並且它是空的;那麼你的服務器不會返回你寫的JSON。如果你的第一個電話給出403;那麼你不會得到任何迴應。如果您不提供更多信息,我們無法幫助您。什麼版本的PowerShell?如果您是Write-host,那麼$ response會寫出什麼? – CmdrTchort

+0

PowerShell版本5.0。修改問題以提供$回覆 – live2learn

0

$response.id應該包含你所需要的價值,因爲PowerShell的自動轉換一個JSON響應PSCustomObject。然後,您應該可以通過$headers.Add("HeaderName",$response.id)將該值添加到$headers變量中,或者創建一個新的哈希表,其名稱爲$request2Headers = @{ "HeaderName" = $response.id }

+0

這有所幫助。萬分感謝!! – live2learn