So senden Sie Dateiinhalte als Body-Entität mit cURL


207

Ich verwende das Befehlszeilenprogramm cURL, um HTTP-POST an einen Webdienst zu senden. Ich möchte den Inhalt einer Datei als Hauptentität des POST einfügen. Ich habe versucht, -d </path/to/filename>sowie andere Varianten mit Typinformationen wie --data </path/to/filename> --data-urlencode </path/to/filename>etc ... zu verwenden. Die Datei ist immer angehängt. Ich brauche es als Körpereinheit.

Antworten:


338

Ich glaube, Sie suchen nach der @filenameSyntax, z.

neue Zeilen entfernen

curl --data "@/path/to/filename" http://...

Behalte neue Zeilen

curl --data-binary "@/path/to/filename" http://...

=====

Durch das Einrollen werden alle Zeilenumbrüche aus der Datei entfernt. Wenn Sie die Datei mit intakten Zeilenumbrüchen senden möchten, verwenden Sie --data-binaryanstelle von --data


21
Wenn Sie wirklich ausgefallen sein möchten, können Sie Folgendes tun: Weist cat file.txt | curl --data "@-" `(< url.txt )` @-Curl an, von stdin zu lesen. Sie können auch einfach die Umleitung verwenden (< x.txt ), um das einzugeben , was Sie möchten. Wenn Sie Bash verwenden.
Breedly

62
Durch das Einrollen werden alle Zeilenumbrüche aus der Datei entfernt. Wenn Sie die Datei mit intakten Zeilenumbrüchen senden möchten, verwenden Sie --data-binaryanstelle von --data.
Chris

Wie würde man nun Anmeldeinformationen hinzufügen, um diese Anfrage zu autorisieren?
anon58192932

@ anon58192932 - Das hängt vom Sicherheitsprotokoll des Servers ab. Wenn Sie name:valuePaare wie einen Benutzernamen und ein Kennwort verwenden, fügen Sie die erforderlichen Header hinzu, die den Erwartungen des Dienstes entsprechen: --header: "<header_name>:<header_value>"als einzelne Zeichenfolge.
Roy Hinkley

19

Ich weiß, dass die Frage beantwortet wurde, aber in meinem Fall habe ich versucht, den Inhalt einer Textdatei an die Slack Webhook- API zu senden, und aus irgendeinem Grund hat die obige Antwort nicht funktioniert. Egal, das hat mir endlich den Trick getan:

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

Dieser konvertiert keine Punkte in Unterstriche (. -> _) und behält Zeilenumbrüche bei. Vielen Dank!
Ramon Fincken

1
Es ist cool, aber es beantwortet die Frage nicht, da die Datei in der Befehlszeile aufgelöst wird, anstatt für Curl angegeben zu werden. Ich frage mich auch, ob alle Sonderzeichen der Shell entkommen müssen - aber ich weiß nicht genug darüber;)
Gerard ONeill

Danke, du hast mein Leben gerettet!
Aryswisnu

Bei einer riesigen Inhaltsdatei funktioniert die oben genannte Locke nicht. curl: argument list too longIn diesem Fall ist die akzeptierte Antwort Lebensrettercurl --data "@/path/to/filename" http://...
weiterer Programmierer von
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.