Curlを介してファイルに指定されたデータを含むPOSTリクエストを送信する


239

コマンドラインからCurl経由でPOSTリクエストを行う必要があります。このリクエストのデータはファイルにあります。私はPUTを介してこれを--upload-fileオプションで実行できることを知っています。

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


1
申し訳ありませんが、問題を誤って説明しました。php-curlではなく、linux osのコマンドラインからcurlコマンドを使用してリクエストを送信する必要があります。
繁殖期

回答:


359

あなたは--data-binary議論を探しています:

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

上記の例では、-iすべてのヘッダーを出力して何が起こっているかを確認できるようにし、-X POSTこれが投稿であることを明示しています。これらの両方は、ワイヤの動作を変更せずに安全に省略できます。ファイルへのパスの前には@記号を付ける必要があるためcurl、ファイルから読み取ることができます。


@ɢʜʘʂʈʀɛɔʘɴこの場合は、次のようになります.xml
dennismonsewicz 14年

52
その@部分は非常に重要です!
ロンクライン

--data-binaryパラメーターを使用しますが、実際のファイルコンテンツはテキストにすることができますか?通常、XMLはバイナリではありません。
デビッド

8
実際には、-dフラグのみを使用できます
Anatoly Yakimchuk

16
@ Tol182 -dcurl改行を削除しますが、--data-binaryそうしません。
Acumenus 2017年

43

コマンドラインからCurl経由でPOSTリクエストを行う必要があります。このリクエストのデータはファイルにあります...

あなたがする必要があるのは、--data引数が@:で始まることです

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

たとえば、呼び出されたファイルにデータがあるstuff.xml場合は、次のようにします。

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

stuff.xmlファイル名は、ファイルへの相対パスまたはフルパスで置き換えることができます @../xml/stuff.xml@/var/tmp/stuff.xml...


2
名前付きフィールドを送信する必要がある場合は、も使用できます--data "name@stuff"
Hermann

15

フォームデータを使用してファイルをアップロードする場合は、パラメータ名を指定する必要があります。次を使用できます。

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


ありがとうございました!1.解決策がうまくいきませんでした。parametername=本当に私を助けてくれました:)
サイボーグ

3

回答のほとんどはここで完璧ですが、私は私の特定の問題のためにここに上陸したとき、私はPOSTメソッドを使用してバイナリファイル(XLSXスプレッドシート)をアップロードする必要があり、私は一つのことを見欠落している、すなわち通常はそのちょうどあなたが持つかもしれない、あなたはロードファイルではありません私の場合と同様に、ファイルへのコメントやファイルへのタグなど、より多くのフォームデータ要素。したがって、それは私のユースケースであるので、ここに追加して、他の人を助けることができるようにしたいと思います。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.