Der Befehl cURL wird unter Linux ausgeführt, jedoch nicht unter Windows 2008

622
Ian M

Ich habe cURL unter Windows 2008 Server installiert und versuche, den folgenden Befehl auszuführen. Dieser Befehl wird auf einem Ubuntu-Computer im selben LAN fehlerfrei ausgeführt. Wenn ich ihn jedoch in Windows ausführe, erhalte ich folgende Fehler:

curl -H "Content-Type: application/json" -X POST -d '{ "entity_id": "switch.study_cam" }' https://192.168.1.99:8123/api/services/switch/turn_off?api_password=MyAPIPassword --insecure curl: (6) Could not resolve host: entity_id curl: (6) Could not resolve host: switch.study_cam curl: (3) [globbing] unmatched close brace/bracket in column 1 {"message": "Data should be valid JSON"} 

Ich habe cURL unter Windows mit http://www.google.com getestet und gültiges HTML zurückgegeben. Es scheint also korrekt installiert zu sein.

Gibt es Syntaxunterschiede zwischen cURL für Windows und Linux oder gibt es eine andere Erklärung dafür, warum der obige Befehl in Windows fehlschlägt?

2
Das Problem ist wahrscheinlicher, dass die Windows-Eingabeaufforderung die einfachen und doppelten Anführungszeichen unterschiedlich interpretiert, jedoch nichts mit curl zu tun hat hardillb vor 6 Jahren 0
Das Problem liegt höchstwahrscheinlich in der verwendeten Shell, da zB cmd.exe und bash unterschiedliche Syntax unterstützen. Wenn man sich den Fehler ansieht, fängt es an, wo ', {und "ins Spiel kommen. Sie brauchen sicherlich etwas Flucht oder ähnliches mit ^ oder so. Thorsten Schöning vor 6 Jahren 0

2 Antworten auf die Frage

1
mvw

Ich würde die JSON-Datei beispielsweise in eine Datei einfügen json.txtund verwenden curl -d @json.txt, um das Problem der Angebotsabwicklung durch die Shell zu vermeiden.

Das würde so etwas geben

curl -H "Content-Type: application/json" -X POST -d @json.txt \ https://192.168.1.99:8123/api/services/switch\ /turn_off?api_password=MyAPIPassword --insecure 

Wenn Sie eine Unix-Shell vermissen, ist MSYS2 ein schönes System, um Ihrem Windows-Rechner die üblichen Tools hinzuzufügen (es muss jedoch neuer als Windows XP / Windows Server 2003 sein).

1
hardillb

Das Problem ist wahrscheinlicher, dass die Windows-Eingabeaufforderung die einfachen und doppelten Anführungszeichen unterschiedlich interpretiert, jedoch nichts mit curl zu tun hat.

Versuchen Sie, die doppelten und einfachen Anführungszeichen im JSON-Abschnitt umzukehren:

curl -H "Content-Type: application/json" -X POST -d "{ 'entity_id': 'switch.study_cam' }" https://192.168.1.99:8123/api/services/switch/turn_off?api_password=MyAPIPassword --insecure