POSTリクエストを行うためのcURLコマンドライン構文は何ですか?


2187

cURLコマンドラインツールを使用してPOSTリクエストを行うにはどうすればよいですか?


curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
svikramjeet

回答:


2542

フィールドあり:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

個別に指定されたフィールドの場合:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

マルチパート:

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

フィールドとファイル名を持つマルチパート:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

データなし:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

詳細については、cURLのマニュアルを参照してください。Webブラウザをエミュレートする上でcURLのチュートリアルが便利です。

libcurlではcurl_formadd()、通常の方法でフォームを送信する前に、関数を使用してフォームを作成します。詳細については、libcurlのドキュメントを参照してください。

大きなファイルの場合、アップロードの進行状況を示すパラメーターを追加することを検討してください。

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

-o output必要とされ、そうでなければプログレスバーは表示されません。


7
@LauriRanta --data-urlencode(ダッシュなし)、少なくとも最近のバージョンでは
waitinforatrain

4
あなたはPUTでリソースを更新する必要がある場合も動作します:-X PUTカール...
Subfuzion

3
私は理解するのに苦労しています...いつWith Fields、いつ、いつそれMultipartをしWithout Dataますか?
CodyBugstein

7
代わりに--dataを使用できます-d
user35538

私はフィールドの配列を持っています。これどうやってするの?
アランバラネバダ州

507

XMLを含むRESTful HTTP POSTの場合:

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

またはJSONの場合、これを使用します。

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

これにより、指定されたファイルの内容が読み取らfilename.txtれ、ポストリクエストとして送信されます。


13
@ tom-wijsmanの説明:curl -X POSTHTTP POSTリクエストを意味し、-dパラメーター(長いバージョン:)--dataはcurlに次のものがPOSTパラメーターになることを伝え@filename、ファイルの内容をfilenameパラメーターとして指定します。このアプローチは、Twitter、Facebook、Ruby on RailsなどのさまざまなWebサービス、CouchDBなどのデータベースのHTTP APIで見られるRESTful HTTP APIで最適に機能します。RESTはRepresentational State
サウンドモンスター

1
応答xmlを1行でなくフォーマットできますか?
ヴィタリーズダネビッチ16

6
-X POSTそれが暗示されているので、あなたはやめることができると思います-d
ベンジフィッシャー

複数のヘッダーを与える方法は?
キーヤ

複数のヘッダー:curl -H "header2:1" -H "header2:2" ...
トマシュクラトフビラ

131

標準入力からのデータ -d @-

例:

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

出力:

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

6
グレートあなたは既にクリップボードにJSONオブジェクトを持っている場合
ルカSteeb

さらに良い:echo "$ message" | curl -H "コンテンツタイプ:application / json" -d @-"$ url"
rzr


61

サイトにログインする場合は、次を実行します。

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

最初の要求は、セッションCookie(ログインが成功したときに提供される)を「ヘッダー」ファイルに保存します。これ以降、そのCookieを使用して、ブラウザーでログインした後に通常アクセスするWebサイトの任意の部分に対してユーザーを認証できます。


6
curlのマニュアルページからのメモ:「-c、--cookie-jarオプションは、Cookieを保存するより良い方法です。」
maxschlepzig


27

怠け者の場合、google-chromeを入手してすべての作業を行うことができます。

  1. 送信するフォームを右クリックして、「検査」を選択します。これにより、DevToolsパネルが開きます。
  2. devtoolsの[ ネットワーク ]タブを選択し、[ ログ保存 ] チェックボックスをオンにし ます。
  3. フォームを送信し、POSTメソッドを持つエントリを検索します(任意の列見出しを右クリックして、確認してメソッドがチェックされています)。
  4. POSTを含む行を右クリックし、[ コピー] > [ cURLとしてコピー ]を選択します。

chrome devtools:cURLとしてコピー

ChromeはすべてのリクエストデータをcURL構文でコピーします。

Chromeは使用しています--data 'param1=hello&param2=world'あなたは、単一使用して、より読みやすくすることができた-dか、-Fあなたはどちらかとすることができる、送信したい要求POSTのタイプに応じて、パラメータごとのapplication/x-www-form-urlencodedか、multipart/form-dataそれに応じて。

これは、POST-EDになりますapplication/x-www-form-urlencodedファイルのアップロードが含まれていないフォームの大半に使用します):

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

以下のためのmultipart/form-dataPOSTの使用-F典型的には、ファイルのアップロードを含む、またはフォームで使用されるフィールドの順序は重要である、または同じ名前の複数のフィールドが必要とされる場合)。

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

User-Agentヘッダは、通常必要とされていないが、私は念のためにそれを投げました。以下~/.curlrcを含むファイルを作成することにより、リクエストごとにユーザーエージェントを設定する必要がなくなります。User-Agent: "Mozilla/2.2"

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