Linux環境におけるcurlコマンド実践活用術 - Web API検証からレジューム対応ファイル取得まで徹底解説

概要

サーバー運用保守やバックエンド開発の現場において、ネットワーク通信の確認やAPIテストに不可欠な標準CUIツール「curl」のコアテクニックを解説します。シンプルなGETリクエストの送信から、RESTful APIのデータ送受信、ヘッダー解析、ネットワーク断に強い大容量ファイルのレジュームダウンロードまで、実務直結のユースケースを体系的に整理しました。

1. 動作環境のセットアップとGETリクエストによるレスポンス取得

実習環境を整えるため、ローカルパッケージインデックスを更新してcurlユーティリティをインストールします。

curlパッケージのインストール実行

curlは、様々な通信プロトコルに対応し、URLをベースにデータの送受信を行うための高機能ネットワークコマンドです。
オプションを指定せずにURLのみを渡して実行した場合、標準でHTTP GETリクエストが発行され、リモートサーバーから返却された本文データがターミナル上へ直接展開されます。
⚙️ [頻出主要オプション一覧]

-s : 進捗メーターや通信エラーメッセージなどの表示を抑制するサイレント(silent)モードで動作させます。
-i : ペイロード(本文)とともに、サーバー側から受信したHTTPレスポンスヘッダーも併せて出力します。
-I : 本文データの取得を省き、HTTPレスポンスヘッダー情報のみをピンポイントで取得します。
-X : GET、POST、PUT、DELETEなど、発行したいHTTPリクエストメソッドを明示的に指定します。
-d : HTTP POST通信時などにサーバーへ渡すリクエストボディデータを設定します。
-H : リクエスト送信時に任意のカスタムHTTPヘッダーを付与します。
-o : 受信したレスポンスデータを指定した任意のファイル名でローカルに保存します。
-O : リモートサーバー側のファイル名をそのまま引き継いでローカル環境に保存します。
-C - : ネットワーク断などで中断された大容量ファイルの転送を、未取得箇所から再開(レジューム)します。
-L : Webサーバーから3xx系リダイレクト応答が返された際、最終的な転送先URLまで自動追従します。

curlによるGETリクエスト送信例

-sオプションを付加することで、転送進捗インジケーターや不要な警告ログが非表示となり、純粋なレスポンス本文のみを取り出すことが可能です。
余分な付加情報が完全に排除されるため、シェルスクリプトへの組み込みやパイプライン(|)を用いた別コマンドとの連動処理において真価を発揮します。

サイレントモードでのIPアドレス取得

2. HTTPレスポンスヘッダーの調査とステータスコードの抽出

リクエスト時に-Iオプションを指定すると、本文(body)データのダウンロードをスキップし、Webサーバーから返されるHTTPヘッダー情報のみを高速に取得できます。
サーバーの返答コード(例: HTTP/2 200)をはじめ、Content-Typeやサーバーソフトウェアの種類を調査する際、ネットワーク帯域を無駄に消費せず瞬時に診断できます。

HEADリクエストによるヘッダー情報のみの取得

一方で-iオプションを使用すると、サーバーから届いたHTTPヘッダーと実際のレスポンス本文が同一画面上へ順番に出力されます。
通信のメタデータと実際の返却データの内容を並行して突き合わせられるため、Web APIの挙動調査やトラブルシューティング時に重宝します。

レスポンスヘッダーと本文の同時表示

-sで進捗ログを伏せ、-o /dev/nullにより本文出力を破棄した上で、-wオプションを使ってHTTPステータスコードのみを特定フォーマットで切り出すテクニックです。
エンドポイントの死活監視(ヘルスチェック)や、Bashスクリプトによる自動監視処理でリターンコードに応じた条件分岐を実装する際の定番パターンです。

フォーマット指定によるHTTPステータスコードの抽出

3. REST APIへのデータ送信と認証トークンの連携(POST / JSON通信)

サーバーから返却されるJSONデータをターミナル上で視認性高く整形・抽出できるよう、コマンドライン用JSONプロセッサであるjqを導入します。

jqパッケージのインストール

-X POSTでリクエストメソッドをPOSTに切り替え、-Hを用いてContent-Typeにapplication/jsonを宣言した上で、-d引数からJSON文字列を送信します。
サーバーへ送出したJSONペイロードが正しく受理されたかどうかは、パイプ(|)経由でjqに渡すことで、カラー表示された構造化データとして一目で確認できます。

JSONペイロードを付与したPOSTリクエスト

認証が必要なエンドポイントへアクセスする際は、-Hオプションを活用してAuthorization: Bearer <トークン>ヘッダーをリクエストに注入します。
JWTやAPIトークンによる認証ガードが敷かれたAPIに対して、必要なクレデンシャルが正しく伝達されているかを検証できます。

Authorizationヘッダーを指定したAPI認証リクエスト

4. 大容量ファイルの効率的なダウンロードとレジューム(中断再開)制御

ファイル転送の実習を行うため、専用の作業ディレクトリを準備して対象フォルダへ移動します。

検証用ディレクトリの作成と移動

リモートサーバーからバイナリファイルを取得する際は、-oオプションにより保存先ファイル名をsample-100k.binと明示してダウンロードを実行します。
コンソール画面上にバイナリ列が文字化けして直接流出する事故を防ぎ、意図した名称で安全にディスクへ保存できます。

ファイル名を指定したバイナリデータのダウンロード

既存ファイルの容量をcurl側で自動検知して未取得地点から転送を継続する-C -と、リモート上のファイル名をそのまま保持する-Oを併用します。
回線状況が不安定なネットワーク環境やギガバイト単位の大容量ファイルを扱う際でも、初めから再ダウンロードする手間を省き、最小限のトラフィックで効率的にリカバリできます。

レジューム機能を有効化したファイル取得

ダウンロード処理の終了後は、ls -lhコマンドを実行してsample-100k.binのファイルサイズと詳細属性を確認し、要求通りの容量で正常にディスクへ書き込まれたかを検証します。

ダウンロード済みファイルの容量検証

ここまで、Linux環境におけるcurlコマンドの基礎的なGET通信から、実践的なAPIデバッグ手法、そして大容量ファイルの安全なレジュームダウンロード手順までを網羅して解説しました。
本稿で取り上げた主要オプションや連携テクニックを日常のサーバー管理やスクリプト自動化へ組み込み、開発・運用の効率化にぜひお役立てください。