web-dev-qa-db-ja.com

Curlを介してファイルに指定されたデータを含むPOST要求を送信する

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

curl Host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"
178
user253202

あなたは--data-binary引数を探しています:

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

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

278
Richard J

コマンドラインから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、...

25
Gray

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

curl -X POST -i -F parametername=@filename Host:port/xxx

9
Lucas Liu

答えのほとんどはここで完璧ですが、特定の問題のためにここに着いたとき、POSTメソッドを使用してバイナリファイル(XLSXスプレッドシート)をアップロードする必要があり、1つ、つまり通常はロードするファイルだけではなく、フォームデータ要素ファイルまたはタグへのコメントなどがありますfileなどに私のケースでした。したがって、他の人を助けることができるように、私のユースケースであるため、ここに追加したいと思います。

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