Was ist die cURL-Befehlszeilensyntax für eine POST-Anfrage?

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

 2337
Author: mic84, 2008-09-17

7 answers

Mit Feldern:

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

Mit einzeln angegebenen 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

Für weitere Informationen siehe das cURL-Handbuch. Das cURL-Tutorial zum Emulieren eines Webbrowsers ist hilfreich.

Verwenden Sie mit libcurl die Funktion curl_formadd(), um Ihr Formular zu erstellen, bevor Sie es wie gewohnt senden. Siehe die libcurl Dokumentation für mehr Information.

Für große Dateien sollten Sie Parameter hinzufügen, um den Upload-Fortschritt anzuzeigen:

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

Der -o output ist erforderlich, sonst erscheint kein Fortschrittsbalken.

 2725
Author: Stephen Deken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-12-02 11:40:58

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 Datei mit dem Namen filename.txt gelesen und als Post-Anforderung gesendet.

 537
Author: soundmonster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-11-04 20:08:19

Daten von stdin mit -d @-

Beispiel:

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

Ausgabe:

<p>Hello <strong>world</strong>!</p>
 150
Author: Ciro Santilli TRUMP BAN IS BAD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-01-27 11:15:55
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

Ist das Beispiel in der Curl Beispiel Handbuch.

Verwenden Sie %26 für das kaufmännische Zeichen, wenn das Obige nicht funktioniert:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
 71
Author: Patrick Desjardins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-03-13 12:01:45

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/

Die erste Anforderung speichert das Sitzungscookie (das bei erfolgreicher Anmeldung bereitgestellt wird) in der Datei "Header". Von nun an können Sie dieses Cookie verwenden, um Sie bei jedem Teil der Website zu authentifizieren, auf den Sie normalerweise zugreifen, nachdem Sie sich mit einem Browser angemeldet haben.

 64
Author: Martin Konecny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-03-04 02:21:37

Wenn du faul bist, kannst du Google-Chrome oder Firefox dazu bringen, die ganze Arbeit für dich zu erledigen.

  1. Klicken Sie mit der rechten Maustaste auf das Formular, das Sie senden möchten, und wählen Sie Inspect (oder Element prüfen für Firefox). Dadurch wird das DevTools-Bedienfeld geöffnet.
  2. Wählen Sie die Registerkarte Network in devtools und aktivieren Sie das Kontrollkästchen Preserve log (Protokolle beibehalten für Firefox).
  3. Senden Sie das Formular und suchen Sie den Eintrag mit der Methode POST (klicken Sie mit der rechten Maustaste auf eine beliebige Spaltenüberschrift und stellen Sie sicher, dass Method aktiviert ist.)
  4. Rechtsklick auf die Zeile mit POST, und wählen Sie Kopieren > Kopieren als cURL.

chrome devtools: als cURL kopieren

Chrome kopiert alle Anforderungsdaten in der cURL-Syntax.

Chrome verwendet --data 'param1=hello&param2=world', die Sie mit einem einzigen -d oder -F pro Parameter besser lesbar machen können, je nachdem, welche Art von POST-Anforderung Sie senden möchten, die entweder application/x-www-form-urlencoded oder multipart/form-data dementsprechend.

Dies wird POST-ed sein 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 einen multipart/form-data BEITRAG verwenden -F (wird normalerweise bei Formularen verwendet, die Dateiuploads 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 Header User-Agent wird normalerweise nicht benötigt, aber ich habe ihn nur für den Fall geworfen. Wenn Sie einen benutzerdefinierten Agenten benötigen, können Sie vermeiden so legen Sie es bei jeder Anforderung fest, indem Sie die ~/.curlrc - Datei erstellen, die z. User-Agent: "Mozilla/2.2"

 39
Author: ccpizza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-07-22 10:15:03
curl -v --data-ascii var=value http://example.com

Und es gibt viele weitere Optionen, überprüfen Sie curl --help für weitere Informationen.

 36
Author: Vinko Vrsalovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-11-05 01:36:05