Wie lautet die cURL-Befehlszeilensyntax für eine POST-Anforderung?

2187

Wie kann ich mit dem cURL- Befehlszeilentool eine POST- Anfrage stellen ?

mic84
quelle
curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
Svikramjeet

Antworten:

2542

Mit Feldern:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

Mit individuell festgelegten Feldern:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart:

curl --form "[email protected]" https://example.com/resource.cgi

Multipart mit Feldern und einem Dateinamen:

curl --form "[email protected];filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Ohne Daten:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Weitere Informationen finden Sie im cURL-Handbuch . Das cURL-Tutorial zum Emulieren eines Webbrowsers ist hilfreich.

Verwenden curl_formadd()Sie in libcurl die Funktion, um Ihr Formular zu erstellen, bevor Sie es auf die übliche Weise senden . Weitere Informationen finden Sie in der libcurl-Dokumentation .

Erwägen Sie bei großen Dateien das Hinzufügen von Parametern, um den Upload-Fortschritt anzuzeigen:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

Das -o outputist erforderlich, sonst erscheint kein Fortschrittsbalken.

Stephen Deken
quelle
7
@LauriRanta --data-urlencode(kein Strich), zumindest in den letzten Versionen
waitinforatrain
4
Funktioniert auch, wenn Sie eine Ressource mit einem PUT aktualisieren müssen: curl -X PUT ...
Subfuzion
3
Ich habe Probleme zu verstehen ... wann würde ich es tun With Fields, wann mit Multipartund wann Without Data?
CodyBugstein
7
Anstelle von --dataIhnen können verwenden -d.
user35538
Ich habe eine Reihe von Feldern. Wie kann ich das machen?
ARUNBALAN NV
507

Für einen RESTful HTTP POST mit XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

oder verwenden Sie für JSON Folgendes:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Dadurch wird der Inhalt der genannten Datei gelesen filename.txtund als Postanforderung gesendet.

Soundmonster
quelle
13
@ tom-wijsman Erklärung: curl -X POSTimpliziert eine HTTP-POST-Anforderung, der -dParameter (lange Version :) --datateilt curl mit, dass es sich bei den folgenden Parametern um POST-Parameter handelt, und @filenamelegt den Inhalt der Datei filenameals Parameter fest. Dieser Ansatz funktioniert am besten mit RESTful-HTTP-APIs wie Twitter, Facebook, verschiedenen anderen Webdiensten wie Ruby on Rails sowie HTTP-APIs von Datenbanken wie CouchDB. REST steht für Representational State Transfer
Soundmonster
1
Wie können wir Antwort-XML nicht in einer Zeile sehen, sondern formatiert?
Vitaly Zdanevich
6
Ich denke, dass Sie das weglassen können, -X POSTda dies impliziert wird -d.
Benjamin
Wie kann ich mehrere Überschriften vergeben?
Keya
Mehrere Header: locken -H "header2: 1" -H "header2: 2" ...
Tomáš Kratochvíla
131

Daten von stdin mit -d @-

Beispiel:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Ausgabe:

<p>Hello <strong>world</strong>!</p>
Ciro Santilli ist ein Schauspieler
quelle
6
Großartig, wenn Sie ein JSON-Objekt bereits in der Zwischenablage haben
Luca Steeb
noch besser: echo "$ message" | curl -H "Inhaltstyp: application / json" -d @ - "$ url"
rzr
66
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

ist das Beispiel im Curl Example Manual .

Verwenden Sie% 26 für das kaufmännische Und, wenn das oben Genannte nicht funktioniert:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
Patrick Desjardins
quelle
61

Wenn Sie sich bei einer Site anmelden möchten, gehen Sie wie folgt vor:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

Bei der ersten Anforderung wird das Sitzungscookie (das bei erfolgreicher Anmeldung bereitgestellt wird) in der Datei "Header" gespeichert. Von nun an können Sie mit diesem Cookie jeden Teil der Website authentifizieren, auf den Sie normalerweise zugreifen, nachdem Sie sich mit einem Browser angemeldet haben.

Martin Konecny
quelle
6
Ein Hinweis aus der Manpage von curl: "Die Option -c, --cookie-jar ist jedoch eine bessere Möglichkeit, Cookies zu speichern."
Maxschlepzig
32
curl -v --data-ascii var=value http://example.com

Weitere Optionen finden Sie unter curl --helpWeitere Informationen.

Vinko Vrsalovic
quelle
27

Wenn Sie faul sind, können Sie Google-Chrome nutzen, um die ganze Arbeit für Sie zu erledigen.

  1. Klicken Sie mit der rechten Maustaste auf das Formular, das Sie senden möchten, und wählen Sie Überprüfen aus . Dadurch wird das DevTools-Bedienfeld geöffnet.
  2. Wählen Sie das Netzwerk - Registerkarte in devtools und kreuzen Sie das Protokoll beibehalten Checkbox.
  3. Senden Sie das Formular ab und suchen Sie den Eintrag mit der Methode POST (klicken Sie mit der rechten Maustaste auf eine Spaltenüberschrift und vergewissern Sie sich, dass die Methode aktiviert ist).
  4. Klicken Sie mit der rechten Maustaste auf die Zeile mit POST und wählen Sie Kopieren > Als CURL kopieren .

Chrome Devtools: Kopieren als CURL

Chrome kopiert alle Anforderungsdaten in cURL-Syntax.

Chrome verwendet Funktionen, --data 'param1=hello&param2=world'die Sie mithilfe eines einzelnen -doder -Fpro Parameter lesbarer machen können, je nachdem, welche Art von POST-Anforderung Sie senden möchten. Diese kann entweder application/x-www-form-urlencodedoder multipart/form-dataentsprechend sein.

Dies wird veröffentlicht als application/x-www-form-urlencoded( wird für die meisten Formulare verwendet, die keine Datei-Uploads enthalten ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

Für eine multipart/form-dataPOST-Verwendung -F( normalerweise bei Formularen verwendet, die Datei-Uploads enthalten oder bei denen die Reihenfolge der Felder wichtig ist oder bei denen mehrere Felder mit demselben Namen erforderlich sind ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

Der User-AgentHeader wird normalerweise nicht benötigt, aber ich habe ihn für alle Fälle reingeworfen. Sie können vermeiden, den Benutzeragenten bei jeder Anforderung einstellen zu müssen, indem Sie die ~/.curlrcDatei erstellen, die zUser-Agent: "Mozilla/2.2"

ccpizza
quelle