2016-09-04 18 views
1

powershellを使用してSwaggerベースのAPIにアクセスしようとしていますが、webSessionでinvoke-restmethodを使用してPOSTメソッドを実行する必要があると思われます。 私はCSRFPowershell Invoke-RestMethodにクッキーの値がありません

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

を要求することにより開始し、私は何の問題もなく、正しいトークン値を見ることができます。 websession変数を見ると、私はいくつかのデータを持っていますが、私は全くクッキー値を取得しません。したがって、セッション変数を使用して2番目のリクエストを送信した場合:

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

クッキー値がないために失敗します。私がFirefox経由で通常のリクエストをした場合、jsessionidなどのクッキーが表示されますが、これらの値をどこで入手するのかわかりません(ここで私は無知になります。私はinvoke-restmethod PSで)

+0

最初の呼び出しでSessionVariableに$がありませんか?次のようにする必要があります:$ webSession、ドキュメントによると: "ウェブリクエストセッションを指定します。ドル記号($)を含む変数名を入力してください" https://technet.microsoft.com/en-us/library/hh849971.aspx –

+0

@DavidBrabant - ありがとうDavid - あなたが提供したリンクからそのセッションからセッション変数を生成している場合は、sessionvariableに$が必要であるとは思わない - "Webリクエストセッションを作成するには、 sign)をInvoke-RestMethodコマンドのSessionVariableパラメータの値に設定します。Invoke-RestMethodはセッションを作成し、変数に保存します。後続のコマンドでは、変数をWebSessionパラメータの値として使用します。 – AskJarv

答えて

3

I)は非常に苦痛直前に入ってで(それをsussedてきた - 私は私自身のクッキーを構築する必要がありました:

$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 

他の誰かが(私は私の髪を引っ張って時間を費やしてきた役に立てば幸いこれ以上外出してください)

関連する問題