Bash 速習チュートリアル

Bash curlコマンド

1. curlコマンドの使用方法

curlコマンドは、HTTP、HTTPS、FTPなどの様々なプロトコルを使用して、サーバーとの間でデータを転送するために使用されます。
ファイルのダウンロードやAPIのテスト、デバッグなど、エンジニアにとって非常に汎用性の高いツールです。

1.1 基本的な使い方

ウェブページやファイルの内容を取得するには、curl [URL] の形式で使用します。

例:

curl http://example.com/file.txt
# 出力結果:
# こんにちは、これはテストファイルです。
# ここには3行のテキストがあります。
# これが最後の行です。

2. オプション

curlコマンドには、動作をカスタマイズするための強力なオプションが多数用意されています。

  • -O - リモートファイルと同じ名前でローカルに保存する
  • -L - リダイレクトを追跡する
  • -I - HTTPヘッダー情報のみを取得する
  • -d - POSTリクエストでデータを送信する
  • -u - サーバー認証用のユーザー名とパスワードを指定する

2.1 リモートファイルと同じ名前で保存する

-Oオプションを使用すると、リモートサーバー上のファイル名をそのまま使用して、ローカルシステムに直接ダウンロードできます。

例:リモートと同じ名前でファイルを保存

curl -O http://example.com/file.txt
# 実行中のプログレス表示例:
# % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#                                  Dload  Upload   Total   Spent    Left  Speed
# 100   134  100   134    0     0    216      0 --:--:-- --:--:-- --:--:--   218

2.2 リダイレクトの追跡

-Lオプションを使用すると、サーバーがリダイレクト(転送)を返した場合に、自動的に新しい場所にリクエストを送り直します。短縮URLや常設リダイレクトが設定されているURLにアクセスする際に必須のオプションです。

例:リダイレクトの追跡

curl -L http://example.com/redirect
# リダイレクト先のコンテンツが表示されます:
# こんにちは、これはテストファイルです。
# ここには3行のテキストがあります。
# これが最後の行です。

2.3 HTTPヘッダーのみを取得する

-Iオプションを使用すると、コンテンツ本体はダウンロードせず、サーバーのレスポンスヘッダー(メタデータ)のみを取得します。サーバーの設定確認や、ファイルの最終更新日を調べる際に役立ちます。

例:HTTPヘッダーのみを取得

curl -I http://example.com
# 出力例:
# HTTP/1.1 200 OK
# Date: Wed, 10 Apr 2025 10:00:00 GMT
# Content-Type: text/html; charset=UTF-8
# Connection: keep-alive

2.4 POSTリクエストによるデータ送信

-dオプションを使用すると、POSTリクエストでデータを送信できます。APIに対してJSONを送ったり、フォームのサブミットをエミュレートしたりする場合に使用します。

例:POSTリクエストによるデータ送信

curl -d "fname=John" https://www.example.com/action_page.php
# 送信されたフォームデータ
# あなたの入力は次のように受信されました:
# fname=John

2.5 サーバー認証用の認証情報指定

-uオプションを使用すると、サーバーの認証(Basic認証など)に必要なユーザー名とパスワードを指定できます。保護されたディレクトリやAPIリソースにアクセスする場合に便利です。

例:ユーザー名とパスワードを指定した認証

curl -u user:password http://example.com/protected
# 認証を通過し、ファイルの内容が表示されます:
# こんにちは、これはテストファイルです。
# ここには3行のテキストがあります。
# これが最後の行です。

3. curlの出力を理解する

curlコマンドの出力内容は、使用するオプションによって変化します。主に以下の要素を確認することが重要です。

  • HTTPステータスコード: リクエストが成功(200 OK)したか、失敗(404 Not Found, 500 Errorなど)したかを示します。
  • レスポンスヘッダー: コンテンツタイプや有効期限、サーバー情報などのメタデータを提供します。
  • レスポンスボディ: サーバーから取得した実際のデータ(HTML、JSON、テキストなど)です。
  • プログレスメーター: ダウンロードやアップロードの進捗状況、転送速度、残り時間をリアルタイムで表示します。