シェルスクリプトの curl にとりあえず付けておくべきオプション(+たまに使うオプションのまとめ)

2025/02/17に公開

はじめに

シェルスクリプト中で API からデータを取得する際など、 curl でどんなオプションを指定しておくか毎回悩んでしまうのでまとめておきます。

ついでに必要に応じて使うオプションもまとめておきます。

※シェルスクリプトに限らず CLI でも有用です

とりあえず指定しておくオプション

基本的に以下のオプションはつけるように覚えておいて問題ないでしょう。

curl -fsSL <URL>

このオプション指定はとりあえず覚えておいて、必要に応じて他のオプションも付けるようにしておけば良いと思います。

各オプションの説明

-f, --fail

http ステータスコードがエラーの場合にスクリプトを異常終了します。

curl はデフォルトだとサーバーがエラーのステータスコードを返した場合、サーバーが返したエラーのHTMLを表示し、スクリプト自体は正常終了を返します。

-f オプションを使うと、ステータスコードに応じてコマンドが異常終了してくれます(エラー 22 を返す)。
シェルスクリプトでは set -e と併せて使うのが良いです。

-s, --silent

進捗状況とエラーメッセージを非表示にします。

スクリプトで実行するのであれば、進捗は邪魔なので非表示にしておきます。
ただしエラー時のメッセージは表示したいので、次の -S オプションを使います。

-S, --show-error

-s オプションと併せて使い、エラー時のメッセージは表示するようにします。

-L, --location

リダイレクトを有効にします。

指定しないとリダイレクトを辿ってくれません。

必要に応じて使うオプション

-X, --request

HTTP メソッドを指定します。

curl -X POST https://example.com
curl -X PUT https://example.com
curl -X PATCH https://example.com
curl -X DELETE https://example.com

-H, --header

ヘッダーを指定します。

curl -H 'Authorization: Bearer <token>' https://example.com

-d, --data

指定したデータを送信します。

POST や PUT, PATCH などの指定と併せて使います。

curl -X PUT
     -H 'Content-Type: application/json' \
     -d '{"name": "John", "age": 20}' \
     https://example.com

-o, --output

レスポンスを標準出力ではなく、指定したファイルに書き込みます。

curl -fsSL -o filename.tar.gz https://example.com/somefile.tar.gz

-O, --remote-name

こちらは大文字の O (オー)です。

小文字の o と同じくファイル保存のオプションですが、こちらはリモート側のファイル名がそのままローカルのファイル名としてダウンロードされます。

特にファイル名を指定する必要がなければ、こっちを使えば良いです。

curl -fsSL -O https://example.com/somefile.tar.gz

# 最後のスラッシュ以後の `somefile.tar.gz` のファイル名で保存される
$ ls
somefile.tar.gz

単にダウンロードするだけなら特にオプションの要らない wget も使い勝手が良いです。

-I, --head

HTTP ヘッダーのみを取得します。

Cookie をサーバーに送信します。

Cookie は name=value 形式でも、次の -c オプションで保存したファイルを指定することもできます。

# 値を指定
curl -b 'name1=value1; name2=value2' https://example.com
curl -b 'name1=value1' -b 'name2=value2' https://example.com

# ファイルを指定
curl -b cookie.txt https://example.com

サーバーから Set-Cookie で返ってきた Cookie をファイルに保存します。

curl -c cookie.txt https://example.com

-u, --user

認証に使うユーザー名とパスワードを指定します。

Basic 認証で使うことが多いです。

curl -u <user:password> https://example.com
GitHubで編集を提案

Discussion