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-Key: 385493

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: erikro
erikro Sep 05, 2018 at 11:13:05 (UTC)
Goto Top
Moin,

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

hth

Erik
Member: Johnny-CGN
Johnny-CGN Sep 05, 2018 updated at 11:29:47 (UTC)
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
Mitglied: 137084
Solution 137084 Sep 05, 2018 updated at 13:23:32 (UTC)
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)  
Member: erikro
erikro Sep 05, 2018 updated at 11:51:17 (UTC)
Goto Top
Moin,

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

sollte gehen.

hth

Erik
Mitglied: 137084
137084 Sep 05, 2018 updated at 12:01:58 (UTC)
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.
Member: erikro
erikro Sep 05, 2018 at 12:08:44 (UTC)
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
Member: Johnny-CGN
Johnny-CGN Sep 05, 2018 at 12:32:30 (UTC)
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
Mitglied: 137084
137084 Sep 05, 2018 updated at 13:28:04 (UTC)
Goto Top
Wat weis ich was das deine Anwendung an Headern erwartet ... vermutlich wieder nur Tippfehler, Großkleinschreibung, whatever.
Member: erikro
erikro Sep 05, 2018 at 13:24:34 (UTC)
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