Was ist der richtige Weg, um einen Inhaltstyp-Header in curl zu senden?

7662
Dave

Ich verwende Mac 10.9.5 mit Bash-Shell. Ich versuche, eine Anfrage über curl zu senden, erhalte aber immer wieder Fehler, wenn ich den Inhaltstyp-Header versuche und setze. Unten versuche ich es

davea$ curl -v -o -H "Content-Type: application/json" -X POST -d '{"username”:”username”,”password”:”password”}’ http://localhost:8080/myproject/login 

aber curl spuckt einen Fehler "curl: (6) Der Host" Content-Type "konnte nicht aufgelöst werden." Unten ist die komplette Ausgabe:

* getaddrinfo(3) failed for Content-Type:80 * Couldn't resolve host 'Content-Type' * Closing connection 0 curl: (6) Couldn't resolve host 'Content-Type' * Trying ::1... * Connected to localhost (::1) port 8080 (#1) > POST /myproject/login HTTP/1.1 > User-Agent: curl/7.40.0 > Host: localhost:8080 > Accept: */* > Content-Length: 40 > Content-Type: application/x-www-form-urlencoded >  * upload completely sent off: 40 out of 40 bytes < HTTP/1.1 302 Found < Server: Apache-Coyote/1.1 < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block < Cache-Control: no-cache, no-store, max-age=0, must-revalidate < Pragma: no-cache < Expires: 0 < X-Frame-Options: DENY < Set-Cookie: JSESSIONID=B980765C84EA5759F743D1AAE8E189D0; Path=/myproject/; HttpOnly < Location: http://localhost:8080/myproject/login?error < Content-Length: 0 < Date: Mon, 06 Jul 2015 16:03:37 GMT <  * Connection #1 to host localhost left intact 

Was ist der richtige Weg, um den Content-Type-Header über curl zu senden?

1

1 Antwort auf die Frage

2
bertieb

Wie kann ich den Content-Type-Header korrekt übermitteln curl?

Verwenden Sie den -HParameter wie angegeben:

-H "Content-Type: application/json" 

Andererseits haben Sie auch die -oOption (Ausgabe in Datei) angegeben, ohne eine Datei anzugeben:

Wenn Sie eine Fortschrittsanzeige für HTTP-POST- oder PUT-Anforderungen wünschen, müssen Sie die Antwortausgabe mithilfe einer Shell-Umleitung (>), -o [Datei] oder einer ähnlichen Datei in eine Datei umleiten.

(von man curl)

Der Befehl lautet also:

$ curl -o output.txt -H "Content-Type: application/json" -X POST -d '{"username":"username","password":"password"}' http://localhost:8080/myproject/login 

(Hinweis: Ich habe auch intelligente Anführungszeichen im obigen Befehl ersetzt, da sie in Ihre Frage eingegangen sind.)

Sollte den Header und die Ausgabe (an output.txt) wie angegeben übergeben. Sie können den -o output.txtParameter auch weglassen, wenn Sie dies nicht benötigen. Obwohl die man curlSeite dies scheinbar nicht angibt, -vkann sie beim Testen nicht mit gemischt werden -o.

Hallo, ich bekomme den Fehler nicht mehr, aber die Datei "output.txt" enthält nichts. Dave vor 9 Jahren 0
@Dave Es scheint, dass `-v` und` -o` nicht zusammen verwendet werden können. Wenn Sie die Ausgabe in eine Datei wünschen, verwenden Sie `-o`. Wenn Sie die Ausgabe von -v`erbose wünschen, verwenden Sie die Dateireitung (`> output.txt`). bertieb vor 9 Jahren 0