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


Wie kann ich ein POST Anfrage mit dem cURL Befehlszeilen-Tool?


2055
2017-09-17 15:39


Ursprung




Antworten:


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

Mehrteilig:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart mit Feldern und einem Dateinamen:

curl --form "fileupload=@my-file.txt;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.

Mit libcurl verwenden Sie die curl_formadd() Funktion, um Ihr Formular zu erstellen, bevor Sie es in der üblichen Weise einreichen. Siehe die libcurl Dokumentation für mehr Informationen.

Bei großen 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

Das -o output ist erforderlich, sonst wird kein Fortschrittsbalken angezeigt.


2385
2017-09-17 15:43



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


Für einen RESTful-HTTP-POST, der XML enthält:

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

oder für JSON, benutze dies:

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

Dies liest den Inhalt der genannten Datei filename.txt und senden Sie es als die Post-Anfrage.


480
2018-03-10 08:29



@ Tom-Wijsman Erklärung: curl -X POST impliziert eine HTTP-POST-Anfrage, die -d Parameter (lange Version: --data) sagt curl, dass was folgt, sind POST - Parameter, und @filename bezeichnet den Inhalt der Datei filename als Parameter. Dieser Ansatz funktioniert am besten mit REST-basierten HTTP-APIs, wie sie bei Twitter, Facebook, verschiedenen anderen Webdiensten, einschließlich Ruby on Rails, sowie HTTP-APIs von Datenbanken wie CouchDB zu finden sind. REST steht für Repräsentative staatliche Übertragung - soundmonster
Wie können wir sehen, Antwort-XML nicht in einer Zeile, sondern formatiert? - Vitaly Zdanevich
Ich denke, dass du das weglassen kannst -X POST da das impliziert wird -d. - benjifisher
Wie gebe ich mehrere Header ein? - keya
Mehrere Header: curl -H "header2: 1" -H "header2: 2" ... - Tomáš Kratochvíla


Daten von stdin: benutzen -d @-. Beispiel:

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

Ausgabe:

<p>Hello <strong>world</strong>!</p>

118
2018-03-25 19:35



Großartig, wenn Sie bereits ein JSON-Objekt in der Zwischenablage haben - Luca Steeb
noch besser: echo "$ message" | curl -H "Inhaltstyp: application / json" -d @ - "$ url" - rzr


curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

ist das Beispiel in der gefunden Curl-Beispiel-Handbuch.

Verwenden Sie% 26 für die Und-Zeichen, wenn das obige nicht funktioniert:

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

64
2017-09-17 15:42





Wenn Sie sich bei einer Site anmelden möchten, gehen Sie folgendermaßen 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 den Sitzungscookie (der bei erfolgreicher Anmeldung bereitgestellt wird) in der Datei "headers". Von nun an können Sie diesen Cookie verwenden, um Sie für jeden Teil der Website zu authentifizieren, auf den Sie normalerweise zugreifen, nachdem Sie sich mit einem Browser eingeloggt haben.


57
2018-03-04 02:21



Eine Notiz von curls man page: 'Die Option -c, --cookie-jar ist jedoch eine bessere Möglichkeit, Cookies zu speichern.' - maxschlepzig


curl -v --data-ascii var=value http://example.com

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


31
2017-09-17 15:43





Wenn Sie faul sind, können Sie google-chrome die ganze Arbeit für Sie erledigen.

  1. Klicken Sie mit der rechten Maustaste auf das Formular, das Sie senden möchten, und wählen Sie aus Prüfen. Dies öffnet das DevTools-Panel.
  2. Wähle aus Netzwerk Registerkarte in Devtools und kreuzen Sie die Protokoll beibehalten Kontrollkästchen.
  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, Methode wird geprüft).
  4. Klicken Sie mit der rechten Maustaste auf die Zeile mit POST und wählen Sie Kopieren > Kopieren als cURL.

chrome devtools: copy as cURL

Chrome kopiert alle Anforderungsdaten in der cURL-Syntax.

Chrome verwendet --data 'param1=hello&param2=world' die Sie besser lesbar machen können, indem Sie einen einzigen verwenden -d oder -F je Parameter, abhängig davon, welche Art von POST-Anfrage Sie senden möchten, was beides sein kann application/x-www-form-urlencoded oder multipart/form-data entsprechend.

Dies wird als POST-ed als application/x-www-form-urlencoded (Wird für die meisten Formulare verwendet, die keine Dateiuploads enthalten):

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

Für ein multipart/form-data POST verwenden -F (Wird normalerweise bei Formularen verwendet, die Dateiuploads enthalten oder bei denen die Reihenfolge der Felder wichtig ist oder 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

Das User-Agent Header wird normalerweise nicht benötigt, aber ich habe es nur für den Fall geworfen. Sie können vermeiden, dass Sie den Benutzeragenten bei jeder Anforderung festlegen müssen, indem Sie den Benutzeragenten erstellen ~/.curlrc Datei, die z.B. User-Agent: "Mozilla/2.2"


16
2017-09-29 08:06