Ich versuche, den folgenden Befehl unter Windows 10 auszuführen:
D:\>curl -i -X POST -H "Content-Type:application/json" -d '{ "firstName" : "Frodo", "lastName" : "Baggins" }' http://localhost:8080/people
Leider erzeugt es zahlreiche Fehler:
curl: (6) Could not resolve host: firstName
curl: (7) Failed to connect to port 80: Connection refused
curl: (6) Could not resolve host: Frodo,
curl: (6) Could not resolve host: lastName
curl: (7) Failed to connect to port 80: Connection refused
curl: (6) Could not resolve host: Baggins
curl: (3) [globbing] unmatched close brace/bracket in column 1
Anscheinend versteht es die Syntax nicht.
Warum ist das so und wie kann das behoben werden?
D:\>curl --version
curl 7.46.0 (x86_64-pc-win32) libcurl/7.46.0 OpenSSL/1.0.2e zlib/1.2.8 WinIDN libssh2/1.6.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz
windows
windows-10
curl
Dims
quelle
quelle
Antworten:
Eine andere Möglichkeit besteht darin, doppelte Anführungszeichen wie folgt mit einem Backslash zu maskieren:
quelle
Es sieht so aus, als würdest du es benutzen
cmd.exe
. Die Regeln für das Entkommen von Kommandozeilencharakteren sind sowohl archaisch als auch schrecklich. Ich empfehle stattdessen die Verwendung von Powershell. Es werden Regeln verwendet, die denenbash
anderer * nix-Shells sehr viel ähnlicher sind (obwohl nicht identisch, insbesondere, weil `(backtick) anstelle von Backslash als Escape-Zeichen verwendet wird).Hier ist der Befehl in Powershell auf meinem System:
Das
&
Anführungszeichen ist erforderlich, da der Pfad zum Programm eine Zeichenfolge in Anführungszeichen ist. Ich musste den Pfad angeben, da ich keincurl.exe
in meinem Windows habePATH
. Ich konnte mich jedoch einfach aus dem Leerzeichen in "Programme" entfernen:Ansonsten funktionieren einfache und doppelte Anführungszeichen so, wie Sie sie verwenden. Dabei wird
'
der Anfang einer Zeichenfolge begrenzt und die"
Zeichen werden genauso wörtlich dargestellt.Beachten Sie , dass Sie den Pfad zu einem schaffen haben
curl
ausführbare Datei, oder zumindest angebencurl.exe
;curl
an sich ist es ein Powershell-Alias für dasInvoke-WebRequest
Cmdlet, das die meisten Funktionen des cURL-Programms ausführen kann, jedoch eine sehr unterschiedliche Argumentensyntax aufweist.Auch wenn Sie Powershell von der Verwendung aus aufrufen können , würde das hier nicht wirklich helfen, da Sie die Zeichenfolge ohnehin mit der albernen Syntax umgehen müssten.
cmd
powershell -c <command>
cmd
Eine weitere Option ist die Verwendung des Windows-Subsystems für Linux (WSL), mit dem Sie Linux-Programme (einschließlich der Ubuntu-Standardversionen von
bash
undcurl
) direkt unter Windows ausführen können , ohne dass eine VM oder ein Neustart erforderlich ist. Ausführliche Informationen hierzu finden Sie unter https://msdn.microsoft.com/en-us/commandline/wsl/about . Die Kurzversion wird jedoch in einem beliebigen Eingabeaufforderungs- oder Powershell-Fenster ausgeführtbash
(oder ausgeführtbash.exe
) und installiert das Linux-Subsystem oder zumindest sagen, wie.quelle
C:\Windows\System32\curl.exe --help
Das Problem ist das Argument -d mit doppelten Anführungszeichen als Argument. Sie müssen es in Anführungszeichen setzen und die darin enthaltenen Anführungszeichen umgehen.
Sie sollten in der Lage sein:
Persönlich würde ich sie in eine Datei stecken und dann aus Gründen der Klarheit -d @Dateiname verwenden.
quelle
Eine andere Problemumgehung in Windows ist die Verwendung von Bash aus Cygwin. Ich hatte das gleiche Problem, mit Bash funktioniert es für mich.
Unter Windows 10 behandelt die integrierte Linux-Anwendungsunterstützung möglicherweise auch die einfachen Anführungszeichen.
quelle
Windows Curl kennt keine einfachen Anführungszeichen. Daher können Sie doppelte Anführungszeichen für Ihre Nutzlast verwenden und alle anderen doppelten Anführungszeichen innerhalb dieser Nutzlast umgehen. Das kommt wie folgt heraus:
quelle