Was ist die cURL-Befehlszeilensyntax für eine POST-Abfrage?
Wie kann ich eine POST -Abfrage mit dem cURL -Befehlszeilentool durchführen?
Mit Feldern:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
Mit einzeln angegebenen Feldern:
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
Multipart:
Multipart mit Feldern und einem Dateinamen:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
Ohne Daten:
Weitere Informationen finden Sie im cURL-Handbuch . Das cURL-Handbuch zur Emulation eines Web-Browsers ist hilfreich.
Mit libcurl verwenden Sie die Funktion curl_formadd()
, um Ihr Formular zu erstellen, bevor Sie es auf dem üblichen Weg abschicken. Weitere Informationen finden Sie in der libcurl-Dokumentation .
Bei großen Dateien sollten Sie das Hinzufügen von Parametern zur Anzeige des Upload-Fortschritts in Erwägung ziehen:
curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi
Die Funktion -o output
ist erforderlich, andernfalls wird kein Fortschrittsbalken angezeigt.
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 für JSON verwenden Sie dies:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
Dies liest den Inhalt der Datei mit dem Namen filename.txt
und sendet ihn als Post-Anforderung.
Daten aus stdin mit -d @-
Beispiel:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
Ausgabe:
<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
ist das Beispiel aus dem Curl Example Manual .
Verwenden Sie %26 für das kaufmännische Und, wenn das obige nicht funktioniert:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
Wenn Sie sich bei einer Website 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/
Die erste Anfrage speichert das Session-Cookie (das bei erfolgreicher Anmeldung bereitgestellt wird) in der “Header”-Datei. Von nun an können Sie dieses Cookie verwenden, um sich für jeden Teil der Website zu authentifizieren, auf den Sie normalerweise nach dem Einloggen mit einem Browser zugreifen.
curl -v --data-ascii var=value http://example.com
und es gibt noch viele weitere Optionen, siehe curl --help
für weitere Informationen.
Wenn Sie faul sind, können Sie google-chrome oder firefox die ganze Arbeit für Sie erledigen lassen.
Chrome kopiert alle Anforderungsdaten in der cURL-Syntax.
Chrome verwendet --data 'param1=hello¶m2=world'
, die Sie lesbarer machen können, indem Sie eine einzelne -d
oder -F
pro Parameter verwenden, je nachdem, welche Art von POST-Anforderung Sie senden möchten, die entsprechend entweder application/x-www-form-urlencoded
oder multipart/form-data
sein kann.
Dies wird POST-ed als application/x-www-form-urlencoded
(verwendet für die Mehrheit der Formulare, 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-data
POST verwenden Sie -F
(typisch verwendet bei Formularen, die Datei-Uploads enthalten, oder wo die Reihenfolge der Felder wichtig ist, oder wo mehrere Felder mit dem gleichen Namen erforderlich sind):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-F param1=hello \
-F name=dinsdale \
-F name=piranha
Die Kopfzeile User-Agent
wird normalerweise nicht benötigt, aber ich habe sie nur für den Fall eingeworfen. Wenn Sie einen benutzerdefinierten Agenten benötigen, können Sie vermeiden, ihn bei jeder Anfrage setzen zu müssen, indem Sie die Datei ~/.curlrc
erstellen, die z.B. User-Agent: "Mozilla/2.2"