412 Stimmen

Senden einer Anfrage an cURL mit Postdaten aus einer Datei

Ich muss eine POST-Anfrage über cURL von der Kommandozeile aus stellen. Die Daten für diese Anfrage befinden sich in einer Datei. Ich weiß, dass dies über PUT mit der Option --upload-file Option.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"

580voto

Richard J Punkte 6203

Sie suchen nach dem --data-binary Argument:

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

Im obigen Beispiel, -i druckt alle Kopfzeilen aus, damit Sie sehen können, was vor sich geht, und -X POST macht deutlich, dass es sich um eine Stelle handelt. Beides kann getrost weggelassen werden, ohne dass sich das Verhalten auf der Leitung ändert. Dem Pfad zur Datei muss ein @ Symbol, also curl weiß, wie man aus einer Datei liest.

129voto

Gray Punkte 111812

Ich muss eine POST-Anfrage über Curl von der Befehlszeile aus stellen. Die Daten für diese Anfrage befinden sich in einer Datei...

Alles, was Sie tun müssen, ist die --data Argument beginnen mit einem @ :

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path

Wenn Sie zum Beispiel die Daten in einer Datei namens stuff.xml dann würden Sie etwas tun wie:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

En stuff.xml filename kann durch einen relativen oder vollständigen Pfad zu der Datei ersetzt werden: @../xml/stuff.xml , @/var/tmp/stuff.xml , ...

27voto

Lucas Liu Punkte 733

Wenn Sie Formulardaten zum Hochladen von Dateien verwenden, bei denen ein Parametername angegeben werden muss, können Sie diese verwenden:

curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx

9voto

Red Boy Punkte 4865

Die meisten Antworten sind hier perfekt, aber als ich hier für mein spezielles Problem gelandet bin, muss ich eine Binärdatei (XLSX-Tabelle) mit der POST-Methode hochladen, sehe ich eine Sache fehlt d.h. in der Regel ist es nicht nur eine Datei, die Sie laden, sondern Sie können mehrere haben Formulardatenelemente , wie Kommentar zu Datei oder Tags zu Datei usw., wie es bei mir der Fall war. Daher möchte ich es hier hinzufügen, da es mein Anwendungsfall war, so dass es anderen helfen könnte.

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url

5voto

cyarbrough Punkte 41

Ich hatte ein ähnliches Problem bei der Übergabe der Datei als Param. Mit -F konnte die Datei als Formulardaten übergeben werden, aber der Inhaltstyp der Datei war application/octet-stream. Mein Endpunkt erwartete text/csv.

Sie können den MIME-Typ der Datei mit der folgenden Syntax festlegen:

-F 'file=@path/to/file;type=<MIME_TYPE>

Der vollständige cURL-Befehl würde also für eine CSV-Datei wie folgt aussehen:

curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com

Eine gute Dokumentation über diese und andere Optionen finden Sie hier: https://catonmat.net/cookbooks/curl/make-post-request#post-form-data

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X