johnny-cgn
Goto Top

Curl mit Bearer-Authorization unter Powershell

Hi.
warum kann die Powershell nicht einfach das tun, was ich will?
Ich bekomme den folgenden Request nicht Ausnahmefrei ans Laufen.. Hat jemand eine Idee?

Das curl-Original

curl -X POST "https://api.application.de/v1/csv-request" -H "accept: application/json" -H "Authorization: Bearer $JWT" -H "Content-Type: application/json" -d "{ \"fields\": [ \"SKU\", \"PRICE\" ], \"numberFormat\": \"DECIMAL_DOT\"}"  

...der Fehlerbehaftete Versuch via Powershell
Invoke-WebRequest -Method Post -Uri "https://api.application.de/v1/csv-request"`  
-Headers @{"Authorization"="bearer "+ New-Object System.Management.Automation.PSCredential($JWT)}, @{"Accept" = "application/json"}`   
-ContentType 'application/json'`  
-Body "{ \"fields\": [ \"SKU\", \"PRICE\" ], \"numberFormat\": \"DECIMAL_DOT\"}"  

Content-ID: 385493

Url: https://administrator.de/contentid/385493

Ausgedruckt am: 19.11.2024 um 22:11 Uhr

erikro
erikro 05.09.2018 um 13:13:05 Uhr
Goto Top
Moin,

das Escape-Zeichen unter der Powershell ist der Backtick und nicht der Backslash. Also nicht \", sondern `"

hth

Erik
Johnny-CGN
Johnny-CGN 05.09.2018 aktualisiert um 13:29:47 Uhr
Goto Top
Ok, damit hätten wir Schritt 1, danke dir.
Leider Spuckt die PS aber noch das folgende und ich bin nicht sicher, wie ich den Token sonst basten soll...
In Zeile:3 Zeichen:38
+ -Headers @{"Authorization"="bearer "+ New-Object System.Management.Au ...  
+                                      ~
Sie müssen nach dem Operator "+" einen Wertausdruck bereitstellen.  
In Zeile:3 Zeichen:39
+ -Headers @{"Authorization"="bearer "+ New-Object System.Management.Au ...  
+                                       ~~~~~~~~~~
Unerwartetes Token "New-Object" in Ausdruck oder Anweisung.  
In Zeile:3 Zeichen:38
+ -Headers @{"Authorization"="bearer "+ New-Object System.Management.Au ...  
+                                      ~
Das Hashliteral war unvollständig.
In Zeile:3 Zeichen:97
+ ... + New-Object System.Management.Automation.PSCredential($JWT)}, @{"Acc ...  
+                                                                 ~
Unerwartetes Token "}" in Ausdruck oder Anweisung.  
    + CategoryInfo          : ParserError: (:) , ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression
137084
Lösung 137084 05.09.2018 aktualisiert um 15:23:32 Uhr
Goto Top
warum kann die Powershell nicht einfach das tun, was ich will?
Wenn du Fehler baust ist sie nicht schuld face-smile! Eine Skriptsprache ist nur so gut wie sein Bediener.
$deinToken = "xxxxxxxxxxxxx"  
Invoke-WebRequest -Method Post -Uri 'https://api.application.de/v1/csv-request' -Headers @{'Authorization' ="Bearer $deinToken"; 'Accept' = 'application/json'} -ContentType 'application/json' -Body  (@{fields = @('SKU','PRICE');numberFormat = 'DECIMAL_DOT'} | ConvertTo-JSON)  
erikro
erikro 05.09.2018 aktualisiert um 13:51:17 Uhr
Goto Top
Moin,

@{"Authorization"="bearer $(New-Object System.Management.Automation.PSCredential($JWT))"}  

sollte gehen.

hth

Erik
137084
137084 05.09.2018 aktualisiert um 14:01:58 Uhr
Goto Top
Zitat von @erikro:
@{"Authorization"="bearer $(New-Object System.Management.Automation.PSCredential($JWT))"}  

sollte gehen.
Ein PSCredentialObject in einem String-Header das dann zum String System.Management.Automation.PSCredential auflöst?? Blödsinn, da muss nur das eigetliche Token als String hin, fertig aus.

Wenn er wirklich noch zusätzliche Http-Credentials mitgeben muss dann tut er das mit dem Parameter -Credentials von Invoke-Webrequest.
erikro
erikro 05.09.2018 um 14:08:44 Uhr
Goto Top
Moin,

Zitat von @137084:

Zitat von @erikro:
@{"Authorization"="bearer $(New-Object System.Management.Automation.PSCredential($JWT))"}  

sollte gehen.
Ein PSCredentialObject in einem String-Header das dann zum String System.Management.Automation.PSCredential auflöst?? Blödsinn, da muss nur das eigetliche Token als String hin, fertig aus.

Wenn er wirklich noch zusätzliche Http-Credentials mitgeben muss dann tut er das mit dem Parameter -Credentials von Invoke-Webrequest.

Da hast Du recht. Da habe ich eine Sekunde zu kurz nachgedacht. ;)

Liebe Grüße

Erik
Johnny-CGN
Johnny-CGN 05.09.2018 um 14:32:30 Uhr
Goto Top
Nah dran...
Nur erhalte ich für den im Curl-Call noch funktionierenden Header nun eine Fehlermeldung...

Invoke-WebRequest : Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseHeader Detail=Headername ist ungültig
In Zeile:5 Zeichen:1
+ Invoke-WebRequest -Method Post -Uri 'https://api.application.de/ ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
137084
137084 05.09.2018 aktualisiert um 15:28:04 Uhr
Goto Top
Wat weis ich was das deine Anwendung an Headern erwartet ... vermutlich wieder nur Tippfehler, Großkleinschreibung, whatever.
erikro
erikro 05.09.2018 um 15:24:34 Uhr
Goto Top
Moin,

da kommt vielleicht ein Error 403 oder 401 zurück. Das würde den Fehler erklären. Er heißt, dass der Server unerwartet antwortet. Die Anfrage geht "korrekt" raus. Ich würde jetzt mal schauen, ob Benutzername und Passwort stimmen.

hth

Erik