curl で POST を送信する方法と便利なオプション一覧

便利ワザ

curl (カール)のオプションを解説します。
REST API のテスト時や、POST リクエストの送信時にご活用ください。

なお、今回オプションを確認した curl は以下のバージョンです。

curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0



curl で POST リクエストを送信する

curl に -XPOST を付加すると POST リクエストとなります。
-d <パラメータ名>=<値> の形式で送信内容を指定可能です。

curl -XPOST -d 'token=abcdefg12345678' https://xxxxx

-d の代わりに --data を使用しても同様の動きをします。
シェルスクリプトに記載する場合は --data の方が分かりやすいでしょう。

curl -XPOST --data 'token=abcdefg12345678' https://xxxxx

POST リクエストのパラメータを複数指定する

パラメータを複数 POST したい場合は、& で繋げます。

curl -XPOST --d 'name=tanaka&age=20' https://xxxxx

もしくは、 -d オプションを複数記載しても OK です。

curl -XPOST --d 'name=tanaka' -d 'age=20' https://xxxxx

任意のリクエストヘッダを付与する

-H オプションで任意のリクエストヘッダを指定できます。
REST API の認証に使われる Authorization ヘッダの指定例は次の通りです。

curl -H "Authorization: Bearer zzzzzz" https://xxxxx

curl コマンドで JSON データを POST する

JSON を送信する場合は、Content-Type の指定が必要です。
リクエストヘッダのオプション -H を用います。

curl -XPOST -H "Content-Type: application/json" -d '{"name":"tanaka"}' https://xxxxx

POST データを外部ファイルから読み込む

POST で送信する内容が多い場合は、あらかじめテキストファイルを作成しておきます。
テキストファイルには POST するデータを直接記載します。

echo "name=hogefuga&age=20" > postdata.txt

-d @ファイル名 もしくは --data @ファイル名 の形式で、用意したファイル名を指定します。

curl -XPOST --data @postdata.txt https://xxxxx

curl のユーザエージェントを指定する

任意の User-Agent を使用してアクセスすることも可能です。
リクエストヘッダ指定用の -H オプションを活用します。

curl -H "User-Agent: Mozilla/5.0 Chrome/69.0" https://xxxxx

curl のバージョンによっては -A や --user-agent でも指定できます。

curl --user-agent "Mozilla/5.0 Chrome/69.0" https://xxxxx

レスポンスヘッダのみを取得する

-I オプションを付与すると HEAD リクエストが送信されます。
HEAD リクエストでは、レスポンスヘッダのみが取得可能です。

curl -I https://xxxxx

ただし、HEAD リクエストでは正しい値を取得できないサーバも存在します。
その場合は、GET リクエストを送信しつつヘッダのみを出力します。

curl -so /dev/null --dump-header - https://xxxxx

curl でリダイレクト先を追う

-L オプションを指定することで、リダイレクト発生時は自動遷移します。

curl -L https://xxxxx

-I オプションと組み合わせるとリダイレクトの動作確認が容易に行なえます。

curl -LI https://xxxxx

curl で BASIC 認証を行う

-u オプションで、BASIC 認証のユーザ名とパスワードを指定します。

curl -u user:password https://xxxxx

curl で取得した内容をファイルへ保存する

curl で取得したデータをファイルへ書き込めます。
ファイルをダウンロードするコマンドとしても活用可能です。

curl https://xxxxx > hoge.txt

-o オプションでもファイル書き出しが可能です。
wget コマンドが使えないサーバーなどで便利に使えます。

curl -o hoge.txt https://xxxxx

curl 実行中の進捗表示を無効化する

curl の実行内容によっては、画面に進捗表示が出力されます。
-s もしくは --silent オプションを指定すると表示を消すことができます。

curl --silent https://xxxxx > hoge.txt

まとめ

curl コマンドの様々なオプションを紹介しました。
curl には、サーバー構築時や API の動作確認に役立つオプションが揃っています。

POST の送信だけでなく、任意のリクエストヘッダも付与できます。
よく使うオプションを覚えておくことで、作業を効率的に進めましょう。

【関連記事】
⇒ ls コマンドのオプション解説
⇒ jq コマンドで JSON を加工する
⇒ jq コマンド応用編
⇒ MySQL のクエリ結果を整形する
⇒ Apache アクセスログの解析コマンド
⇒ CentOS が重いときの確認コマンド
⇒ CentOS のサービス一覧を確認する
⇒ file, strings, zipinfo でファイルを調査する