web-dev-qa-db-ja.com

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

cURL コマンドを使用して、 POST 要求を行う方法 - ラインツール?

2152
Laurie Young

フィールドを使って:

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 "[email protected]" https://example.com/resource.cgi

フィールドとファイル名を含むマルチパート:

curl --form "[email protected];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は必須で、そうでなければ進行状況バーは表示されません。

2501
Stephen Deken

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という名前のファイルの内容を読み込み、それをpostリクエストとして送信します。

501
soundmonster

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

例:

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

出力:

<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

Curlサンプルマニュアル にある例です。

上記の方法でうまくいかない場合でも、アンパーサンドに%26を使用してください。

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
66

サイトにログインしたい場合は、次の手順に従ってください。

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

最初のリクエストはセッションクッキー(ログイン成功時に提供されたもの)を "headers"ファイルに保存します。今後は、そのクッキーを使用して、ブラウザでログインした後に通常アクセスするWebサイトの任意の部分に対してユーザーを認証できます。

60
Martin Konecny
curl -v --data-ascii var=value http://example.com

そして、もっとたくさんのオプションがあります。詳細についてはcurl --helpをチェックしてください。

32
Vinko Vrsalovic

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

  1. 送信するフォームを右クリックして、Inspectを選択します。これにより、DevToolsパネルが開きます。
  2. DevtoolsでNetworkタブを選択し、Preserve logチェックボックスにチェックマークを付けます。
  3. フォームを送信し、メソッドPOSTでエントリを見つけます(列ヘッダーを右クリックして、Methodがオンになっていることを確認します)。
  4. POSTを含む行を右クリックし、Copy>cURLとしてコピーを選択します。

chrome devtools: copy as cURL

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

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

これはapplication/x-www-form-urlencodedとしてPOSTされます。ファイルのアップロードを含まないフォームの大部分で使用されます):

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

multipart/form-data POSTの場合は、-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"

25
ccpizza