「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"}'
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/
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
「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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
