Powershell Invoke-RestMethod缺少cookie值

时间:2016-09-04 19:15:46

标签: rest powershell swagger

我正在尝试使用带有websession的powershell invoke-restmethod来访问基于Swagger的API,以便(希望)捕获我需要执行post方法的cookie /会话信息。 我首先请求CSRF

$CSRF = Invoke-RestMethod -Uri ($Uri+'csrf-token') -Method Get -Credential $Creds -ContentType 'application/json'-SessionVariable websession

我可以看到正确的令牌值而没有任何问题。看看websession变量我确实有一些数据,但我根本没有得到任何cookie值。因此,如果我使用会话变量提交第二个请求:

Invoke-RestMethod -Method Post -Uri ($Uri+'post') -Headers $Header -Body $Body -Credential $creds -WebSession $websession

由于缺少cookie值而失败。如果我通过Firefox执行正常请求,我会看到带有jsessionid等的cookie但是我不知道如何在我可以使用它们的地方获取这些值(请原谅我这里的无知 - 我对invoke-restmethod相对较新在PS)

1 个答案:

答案 0 :(得分:5)

我已经把它弄出来了(最后 - 非常痛苦) - 我必须建立自己的cookie:

$CSRF = Invoke-RestMethod -Uri ($Uri+'csrf-token') -Method Get -Credential $Creds -ContentType 'application/json' -SessionVariable websession -MaximumRedirection 0
$CSRFToken = $CSRF.tokenValue
# Capture cookie
$cookiejar = New-Object System.Net.CookieContainer 
$cookieUrl = $uri +'csrf-token'
$cookieheader = ""
$webrequest = [System.Net.HTTPWebRequest]::Create($cookieUrl); 
$webrequest.Credentials = $creds
$webrequest.CookieContainer = $cookiejar 
$response = $webrequest.GetResponse() 
$cookies = $cookiejar.GetCookies($cookieUrl) 
# add cookie to websession
foreach ($cookie in $cookies) {$websession.Cookies.Add((Create-Cookie -name $($cookie.name) -value $($cookie.value) -domain $apiserverhost))}
# Finally, I can post:
Invoke-RestMethod -Method Post -Uri ($Uri+'versions/createVersionRequests') -Headers $Header -Body $Body -Credential $creds -WebSession $websession

希望能帮助别人(我花了好几个小时把头发拉过来!)