curlコマンドの使い方|APIリクエストやファイルダウンロードの実践例


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, ネットワーク, ネットワーク管理コマンド > curlコマンドの使い方|APIリクエストやファイルダウンロードの実践例
「curlコマンドでAPIにリクエストを送りたいけど、オプションが多すぎてわからない」
「POSTでJSONデータを送信する方法を知りたい」

curlはURLを指定してデータを取得・送信できるコマンドです。Web APIの動作確認、ファイルのダウンロード、HTTPヘッダの確認など、サーバー管理や開発の現場で幅広く使います。
この記事では、curlの基本的な使い方から、POST/PUT/DELETEリクエスト、ヘッダ操作、認証、ファイルダウンロードまで実務で必要な操作を網羅します。

curlとは?

curl(Client URL)は、コマンドラインからHTTP/HTTPS/FTPなどのプロトコルでデータ転送を行うツールです。

似たコマンドにwgetがありますが、用途が異なります。

curl:APIリクエスト、ヘッダ確認、POST送信など多機能。スクリプトでの利用に強い
wget:ファイルのダウンロードに特化。再帰ダウンロードが得意

APIの動作確認やWebサーバーのレスポンス検証にはcurlが適しています。

基本的な使い方

1. URLの内容を取得する(GET)

最もシンプルな使い方です。URLを指定するだけで、レスポンスのボディが標準出力に表示されます。

# Webページの内容を取得 curl https://example.com # HTTPSの証明書エラーを無視する(テスト環境向け) curl -k https://self-signed.example.com

2. レスポンスヘッダを確認する(-I / -i)

Webサーバーの設定確認やトラブル調査でよく使います。

# レスポンスヘッダだけ表示(HEAD リクエスト) curl -I https://example.com HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 1256 Server: nginx/1.24.0 # ヘッダ+ボディの両方を表示 curl -i https://example.com

3. ファイルをダウンロードする(-o / -O)

# ファイル名を指定して保存 curl -o localfile.tar.gz https://example.com/archive.tar.gz # URLのファイル名でそのまま保存 curl -O https://example.com/archive.tar.gz # ダウンロードの進捗を非表示にする(スクリプト向け) curl -sO https://example.com/archive.tar.gz

4. リダイレクトに追従する(-L)

HTTPリダイレクト(301/302)が返された場合、デフォルトではcurlは追従しません。-Lオプションで自動的に追従します。

# リダイレクト先まで追従して取得 curl -L https://example.com/old-page

POST/PUT/DELETEリクエスト

1. POSTでデータを送信する(-d / -X POST)

フォームデータやJSON形式でデータを送信します。

# フォームデータを送信 curl -d "name=miyazaki&email=test@example.com" https://example.com/api/users # JSONデータを送信 curl -X POST https://example.com/api/users -H "Content-Type: application/json" -d '{"name":"miyazaki","email":"test@example.com"}'

-d を使うと自動的にPOSTリクエストになるため、-X POSTは省略できます。ただし、明示的に書いた方が可読性は上がります。

2. PUTでデータを更新する

curl -X PUT https://example.com/api/users/1 -H "Content-Type: application/json" -d '{"name":"updated_name"}'

3. DELETEでリソースを削除する

curl -X DELETE https://example.com/api/users/1

応用・実務Tips

1. カスタムヘッダを付与する(-H)

APIの認証トークンやカスタムヘッダを送信する場合に使います。

# Authorizationヘッダを付与 curl -H "Authorization: Bearer your_token_here" https://example.com/api/data # 複数のヘッダを指定 curl -H "Content-Type: application/json" -H "Accept: application/json" https://example.com/api/data

2. Basic認証を使う(-u)

# ユーザー名:パスワードで認証 curl -u admin:password https://example.com/admin/ # パスワードを対話式で入力(コマンド履歴に残さない) curl -u admin https://example.com/admin/

コマンドラインにパスワードを直接書くと、historyに残ってセキュリティリスクになります。対話式の入力を推奨します。

3. レスポンスタイムを計測する(-w)

Webサーバーのパフォーマンス調査に使えるテクニックです。

# 接続時間・転送時間・合計時間を計測 curl -o /dev/null -s -w "DNS: %{time_namelookup}s Connect: %{time_connect}s Total: %{time_total}s " https://example.com DNS: 0.012s Connect: 0.045s Total: 0.156s

4. 出力を整形する(jqとの組み合わせ)

JSON形式のAPIレスポンスを見やすく整形するには、jqコマンドにパイプします。

# JSONレスポンスを整形表示 curl -s https://example.com/api/data | jq . # 特定のフィールドだけ抽出 curl -s https://example.com/api/users | jq '.[].name'

5. プロキシ経由でアクセスする(-x)

# HTTPプロキシ経由でアクセス curl -x http://proxy.example.com:8080 https://example.com

トラブルシュート・エラー対処

「curl: (60) SSL certificate problem」が出た時の対処法

SSL証明書の検証に失敗した場合のエラーです。

# テスト環境で証明書エラーを無視する場合 curl -k https://self-signed.example.com # CA証明書を指定する場合 curl --cacert /path/to/ca-cert.pem https://example.com

-kオプションは本番環境では使わないでください。証明書の検証を無効にするため、中間者攻撃のリスクがあります。

「curl: (7) Failed to connect」が出た時の対処法

接続先のサーバーに到達できない場合のエラーです。

# ネットワーク疎通を確認 ping example.com # ポートが開いているか確認 ss -tlnp | grep :443 # DNS解決を確認 dig example.com

「curl: (28) Connection timed out」が出た時の対処法

タイムアウトが発生した場合は、-m(最大時間)や --connect-timeout で調整できます。

# 接続タイムアウトを10秒に設定 curl --connect-timeout 10 https://example.com # リクエスト全体のタイムアウトを30秒に設定 curl -m 30 https://example.com

本記事のまとめ

やりたいこと コマンド
URLの内容を取得する curl URL
レスポンスヘッダを確認する curl -I URL
ファイルをダウンロードする curl -O URL
リダイレクトに追従する curl -L URL
POSTでJSONデータを送信する curl -X POST -H "Content-Type: application/json" -d 'JSON' URL
カスタムヘッダを付与する curl -H "ヘッダ名: 値" URL
Basic認証でアクセスする curl -u ユーザー名 URL
レスポンスタイムを計測する curl -o /dev/null -s -w "Total: %{time_total}s" URL
タイムアウトを設定する curl --connect-timeout 10 URL

curlで確認したその先、サーバー構築の全体像を把握していますか?

curlでAPIやWebサーバーの動作確認ができるようになったら、次はサーバー自体の構築・設定を理解しましょう。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る