2017-02-23 4 views
1

Ich versuche, diese beiden (Arbeits) curl-Befehle in Powershell zu übersetzen. Wie speichern Sie ein Cookie mit Invoke-WebRequest?Powershell Cookie verwenden, um zu authentifizieren

Get Session-Cookie bash

curl -k \ 
--cookie-jar cookie \ 
-H 'Content-Type: application/json' \ 
-d '{"jsonrpc": "2.0", "id": 1, "method": "login", "params": {"username": "bob", "password": "correct-horse-battery-staple"}}' \ 
https://foo.example.com/api/session 

Get Session Cookie-Powershell

$data = @{} 
$data.jsonrpc = '2.0' 
$data.id = '1' 
$data.method = 'login' 
$data.params = @{} 
$data.params.username = 'bob' 
$data.params.password = 'correct-horse-battery-staple' 
$url = "https://foo.example.com/api/session" 
$webrequest = Invoke-WebRequest -Method POST ` 
-ContentType 'application/json' ` 
-Body $data ` 
-Uri $url ` 
-SessionVariable websession ` 
-UseBasicParsing 
$cookies = $websession.Cookies.GetCookies($url) 
Write-Host "$($cookies[0].name) = $($cookies[0].value)" 

Get Version bash

curl -k \ 
--cookie cookie \ 
-H 'Content-Type: application/json' \ 
-d '{"jsonrpc": "2.0", "id": 2, "method": "version"}' \ 
https://foo.example.com/api/about 

Get Version Power

$data = @{} 
$data.jsonrpc = '2.0' 
$data.id = '2' 
$data.method = 'version' 
$url = "https://foo.example.com/api/about" 
Invoke-WebRequest -Method POST ` 
-ContentType 'application/json' ` 
-Body $data ` 
-Uri $url ` 
-WebSession $websession ` 
-UseBasicParsing 

Der zweite Befehl ist vorbei nicht im Cookie richtig und gibt Fehler

‚Decodierung fehlgeschlagen‘
StatusCode  : 200 
StatusDescription : OK 
Content   : {"error":{"code":-32000,"message":"Decoding failed: Syntax error","data":null},"id":null} 
RawContent  : HTTP/1.1 200 OK 
        Pragma: no-cache 
        Keep-Alive: timeout=5, max=100 
        Connection: Keep-Alive 
        Content-Length: 89 
        Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
        Content-Ty... 
Forms    : 
Headers   : {[Pragma, no-cache], [Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive], [Content-Length, 89]...} 
Images   : {} 
InputFields  : {} 
Links    : {} 
ParsedHtml  : 
RawContentLength : 89 

Warum mit einem Cookie, aber Powershell Fehler erfolgreich authentifiziert hat curl?

Mit Blick auf die Variable $ Websession

$websession 

Headers    : {} 
Cookies    : System.Net.CookieContainer 
UseDefaultCredentials : False 
Credentials   : 
Certificates   : 
UserAgent    : Mozilla/5.0 (Windows NT; Windows NT 6.3; en-US) 
         WindowsPowerShell/5.0.10586.117 
Proxy     : 
MaximumRedirection : -1 

Antwort

1

Found the solution here

Die Variable $ data ist ein Objekt, während die api erwartet json

$data.gettype() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Hashtable        System.Object 

Die Lösung $ zu konvertieren ist, Daten zu json (ConvertTo-Json $data)

Invoke-WebRequest -Method POST ` 
-ContentType 'application/json' ` 
-Body (ConvertTo-Json $data) ` 
-Uri $url ` 
-WebSession $websession ` 
-UseBasicParsing 
Verwandte Themen