[Linux] curlコマンドの使い方 – Webサーバーとの通信処理

curlコマンドは、LinuxでWebサーバーとの通信を行うためのツールです。

HTTPやHTTPSなどのプロトコルを使用して、リクエストを送信し、レスポンスを取得できます。

基本的な使い方は curl URL で、指定したURLに対してGETリクエストを送信します。

POSTリクエストを送信する場合は curl -X POST URLcurl -d 'data' URL を使用します。

ヘッダーの追加は -H 、レスポンスの保存は -o オプションで行います。

この記事でわかること
  • curlコマンドの基本的な使い方
  • リクエストのカスタマイズ方法
  • データ送信のさまざまな形式
  • SSL/TLS通信の設定方法
  • プロキシサーバーの利用方法

目次から探す

curlコマンドとは

curl(カール)は、コマンドラインからURLを指定してデータを転送するためのツールです。

主にHTTP、HTTPS、FTPなどのプロトコルを使用して、Webサーバーとの通信を行います。

curlは、リクエストの種類(GET、POST、PUT、DELETEなど)を指定できるため、APIとの連携やファイルのダウンロード、アップロードなど、さまざまな用途に利用されます。

特に、スクリプトや自動化されたタスクでの使用が多く、シンプルな構文で強力な機能を持つため、開発者やシステム管理者にとって非常に便利なツールです。

また、curlは多くのオプションを持ち、リクエストのカスタマイズやレスポンスの処理も柔軟に行うことができます。

基本的なcurlコマンドの使い方

curlコマンドは、さまざまなHTTPリクエストを送信するために使用されます。

以下に、基本的なリクエストの送信方法を示します。

GETリクエストの送信

GETリクエストは、指定したURLからデータを取得するために使用されます。

基本的な構文は以下の通りです。

curl http://example.com

このコマンドを実行すると、指定したURLのコンテンツが表示されます。

POSTリクエストの送信

POSTリクエストは、サーバーにデータを送信するために使用されます。

以下のように、-dオプションを使ってデータを指定します。

curl -X POST -d "name=John&age=30" http://example.com/api

このコマンドでは、nameageのデータを指定したURLに送信します。

PUTリクエストの送信

PUTリクエストは、指定したリソースを更新するために使用されます。

以下のように実行します。

curl -X PUT -d "name=Jane" http://example.com/api/user/1

このコマンドでは、ユーザーIDが1のリソースのnameJaneに更新します。

DELETEリクエストの送信

DELETEリクエストは、指定したリソースを削除するために使用されます。

以下のように実行します。

curl -X DELETE http://example.com/api/user/1

このコマンドでは、ユーザーIDが1のリソースを削除します。

HEADリクエストの送信

HEADリクエストは、指定したURLのヘッダー情報を取得するために使用されます。

以下のように実行します。

curl -I http://example.com

このコマンドでは、指定したURLのレスポンスヘッダーが表示されます。

リクエストのカスタマイズ

curlコマンドでは、リクエストをカスタマイズするためのさまざまなオプションが用意されています。

以下に、主なカスタマイズ方法を示します。

ヘッダーの追加・変更

リクエストにカスタムヘッダーを追加するには、-Hオプションを使用します。

以下のように実行します。

curl -H "Authorization: Bearer token" -H "Content-Type: application/json" http://example.com/api

このコマンドでは、AuthorizationヘッダーとContent-Typeヘッダーを追加しています。

クッキーの送信

クッキーを送信するには、-bオプションを使用します。

以下のように実行します。

curl -b "session_id=abc123" http://example.com

このコマンドでは、session_idというクッキーを指定したURLに送信します。

ユーザーエージェントの指定

ユーザーエージェントを指定するには、-Aオプションを使用します。

以下のように実行します。

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" http://example.com

このコマンドでは、指定したユーザーエージェントを使用してリクエストを送信します。

認証情報の送信

curlでは、さまざまな認証方法を使用してリクエストを送信できます。

以下に代表的な2つの方法を示します。

Basic認証

Basic認証を使用するには、-uオプションを使用します。

以下のように実行します。

curl -u "username:password" http://example.com/api

このコマンドでは、指定したユーザー名とパスワードを使用して認証を行います。

Bearerトークンの使用

Bearerトークンを使用する場合は、-HオプションでAuthorizationヘッダーを指定します。

以下のように実行します。

curl -H "Authorization: Bearer your_token" http://example.com/api

このコマンドでは、指定したBearerトークンを使用して認証を行います。

タイムアウトの設定

リクエストのタイムアウトを設定するには、--max-timeオプションを使用します。

以下のように実行します。

curl --max-time 10 http://example.com

このコマンドでは、リクエストが10秒以内に完了しない場合、タイムアウトとして処理されます。

データの送信方法

curlコマンドを使用して、さまざまな形式のデータをサーバーに送信することができます。

以下に、主なデータ送信方法を示します。

フォームデータの送信

フォームデータを送信するには、-dオプションを使用します。

データはkey=value形式で指定します。

以下のように実行します。

curl -X POST -d "username=johndoe&password=secret" http://example.com/login

このコマンドでは、usernamepasswordのフォームデータを指定したURLに送信します。

JSONデータの送信

JSON形式のデータを送信する場合、-HオプションでContent-Typeを指定し、-dオプションでJSONデータを送信します。

以下のように実行します。

curl -X POST -H "Content-Type: application/json" -d '{"name": "John", "age": 30}' http://example.com/api

このコマンドでは、JSON形式のデータを指定したURLに送信します。

ファイルのアップロード

ファイルをアップロードするには、-Fオプションを使用します。

以下のように実行します。

curl -X POST -F "file=@/path/to/file.txt" http://example.com/upload

このコマンドでは、指定したファイルをサーバーにアップロードします。

@記号を使ってファイルパスを指定します。

マルチパートデータの送信

マルチパートデータを送信する場合も、-Fオプションを使用します。

以下のように実行します。

curl -X POST -F "file=@/path/to/file.txt" -F "description=Sample file" http://example.com/upload

このコマンドでは、ファイルと追加のフォームデータdescriptionを同時に送信します。

マルチパート形式でデータを送信することで、複数のデータを一度に処理できます。

レスポンスの処理

curlコマンドを使用してリクエストを送信した後、サーバーからのレスポンスを処理する方法について説明します。

以下に、主なレスポンス処理の方法を示します。

レスポンスの保存

レスポンスをファイルに保存するには、-oオプションを使用します。

以下のように実行します。

curl -o response.txt http://example.com

このコマンドでは、指定したURLからのレスポンスをresponse.txtというファイルに保存します。

レスポンスヘッダーの表示

レスポンスヘッダーを表示するには、-Iオプションまたは-Dオプションを使用します。

以下のように実行します。

curl -I http://example.com

このコマンドでは、指定したURLのレスポンスヘッダーが表示されます。

レスポンスステータスコードの確認

レスポンスのステータスコードを確認するには、-oオプションと-wオプションを組み合わせて使用します。

以下のように実行します。

curl -o /dev/null -w "%{http_code}" http://example.com

このコマンドでは、レスポンスのステータスコードが表示されます。

/dev/nullに出力を捨てることで、ボディ部分は表示されません。

レスポンスのフォーマット指定

レスポンスのフォーマットを指定して整形表示することも可能です。

以下に、JSONとXMLのレスポンス整形表示の方法を示します。

JSONレスポンスの整形表示

JSONレスポンスを整形表示するには、jqコマンドを使用します。

以下のように実行します。

curl -s http://example.com/api | jq .

このコマンドでは、指定したURLからのJSONレスポンスを整形して表示します。

-sオプションはサイレントモードで、進行状況を表示しません。

XMLレスポンスの整形表示

XMLレスポンスを整形表示するには、xmllintコマンドを使用します。

以下のように実行します。

curl -s http://example.com/api | xmllint --format -

このコマンドでは、指定したURLからのXMLレスポンスを整形して表示します。

--formatオプションを使用することで、XMLが見やすく整形されます。

SSL/TLS通信の扱い

curlコマンドを使用してSSL/TLS通信を行う際の基本的な操作方法について説明します。

以下に、主なSSL/TLS通信の扱い方を示します。

HTTPS通信の基本

curlを使用してHTTPS通信を行うには、特別な設定は必要ありません。

単にHTTPSで始まるURLを指定するだけで、SSL/TLSを使用した通信が行われます。

以下のように実行します。

curl https://example.com

このコマンドでは、指定したURLに対してHTTPSリクエストを送信します。

curlは自動的にSSL/TLSを使用して通信を行います。

証明書の検証を無効化する

SSL証明書の検証を無効化するには、-kまたは--insecureオプションを使用します。

以下のように実行します。

curl -k https://example.com

このコマンドでは、SSL証明書の検証を行わずにHTTPSリクエストを送信します。

開発環境やテスト環境で自己署名証明書を使用している場合に便利ですが、本番環境では推奨されません。

クライアント証明書の使用

クライアント証明書を使用して認証を行うには、--certオプションを使用します。

以下のように実行します。

curl --cert /path/to/client.crt --key /path/to/client.key https://example.com

このコマンドでは、指定したクライアント証明書と秘密鍵を使用してHTTPSリクエストを送信します。

クライアント証明書が必要なサーバーにアクセスする際に使用します。

SSL/TLSバージョンの指定

特定のSSL/TLSバージョンを指定してリクエストを送信するには、--tlsv1.2--tlsv1.3などのオプションを使用します。

以下のように実行します。

curl --tlsv1.2 https://example.com

このコマンドでは、TLS 1.2を使用してHTTPSリクエストを送信します。

特定のバージョンを指定することで、互換性の問題を回避することができます。

プロキシサーバーの利用

curlコマンドを使用してプロキシサーバーを介してリクエストを送信する方法について説明します。

以下に、主なプロキシサーバーの利用方法を示します。

プロキシ経由でのリクエスト送信

プロキシサーバーを経由してリクエストを送信するには、-xオプションを使用します。

以下のように実行します。

curl -x http://proxy.example.com:8080 http://example.com

このコマンドでは、指定したプロキシサーバー(proxy.example.comのポート8080)を経由して、http://example.comにリクエストを送信します。

プロキシ認証の設定

プロキシサーバーが認証を必要とする場合、-Uオプションを使用してユーザー名とパスワードを指定します。

以下のように実行します。

curl -x http://proxy.example.com:8080 -U "username:password" http://example.com

このコマンドでは、指定したプロキシサーバーに対して認証情報を提供し、リクエストを送信します。

SOCKSプロキシの使用

SOCKSプロキシを使用する場合は、--socks5オプションを使用します。

以下のように実行します。

curl --socks5 socks5://proxy.example.com:1080 http://example.com

このコマンドでは、指定したSOCKSプロキシ(proxy.example.comのポート1080)を経由して、http://example.comにリクエストを送信します。

SOCKSプロキシは、HTTP以外のプロトコルにも対応しているため、さまざまな用途に利用できます。

応用例

curlコマンドは、さまざまなシナリオで活用できます。

以下に、具体的な応用例を示します。

APIとの連携

curlはAPIとの連携に非常に便利です。

例えば、JSON形式のデータをPOSTリクエストで送信する場合、以下のように実行します。

curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://api.example.com/resource

このコマンドでは、指定したAPIエンドポイントにJSONデータを送信します。

ファイルのダウンロード自動化

curlを使用してファイルを自動的にダウンロードすることもできます。

以下のように実行します。

curl -O https://example.com/file.zip

このコマンドでは、指定したURLからファイルをダウンロードし、元のファイル名で保存します。

-Oオプションを使用することで、URLの最後の部分をファイル名として使用します。

Webスクレイピングの基礎

curlを使用してWebページの内容を取得し、スクレイピングを行うことができます。

以下のように実行します。

curl -s https://example.com | grep "特定のキーワード"

このコマンドでは、指定したURLの内容を取得し、grepコマンドを使用して特定のキーワードを含む行を抽出します。

-sオプションはサイレントモードで、進行状況を表示しません。

複数リクエストの一括送信

複数のリクエストを一度に送信する場合、xargsコマンドと組み合わせて使用することができます。

以下のように実行します。

echo -e "http://example.com/1\nhttp://example.com/2" | xargs -n 1 curl -O

このコマンドでは、複数のURLを一括でダウンロードします。

-n 1オプションは、1つの引数をcurlに渡すことを指定します。

リクエストのリトライ設定

リクエストが失敗した場合に自動的にリトライする設定を行うには、--retryオプションを使用します。

以下のように実行します。

curl --retry 3 https://example.com

このコマンドでは、リクエストが失敗した場合に最大3回までリトライを行います。

これにより、一時的なネットワークの問題に対処することができます。

よくある質問

curlでPOSTリクエストが失敗するのはなぜ?

POSTリクエストが失敗する原因はいくつかあります。

主な理由は以下の通りです。

  • URLが間違っている
  • サーバーがPOSTリクエストを受け付けていない
  • 必要なヘッダー(例:Content-Type)が不足している
  • 認証情報が正しくない
  • サーバー側のエラー(500系エラー)

これらの要因を確認し、適切に修正することで問題を解決できます。

curlでSSL証明書エラーが出る場合の対処法は?

SSL証明書エラーが発生する場合、以下の対処法があります。

  • -kオプションを使用して証明書の検証を無効化する(開発環境向け)
  • 正しいSSL証明書をサーバーにインストールする
  • curlのバージョンを最新に更新する
  • CA証明書のパスを指定する(--cacertオプションを使用)

本番環境では、証明書の検証を無効化することは推奨されませんので、適切な証明書を使用することが重要です。

curlでレスポンスが表示されない場合の原因は?

レスポンスが表示されない場合、以下の原因が考えられます。

  • リクエストが失敗している(404や500エラーなど)
  • -oオプションを使用してレスポンスをファイルに保存している
  • サイレントモード(-sオプション)を使用している
  • ネットワーク接続の問題

これらの要因を確認し、適切に対処することでレスポンスを表示させることができます。

まとめ

この記事では、curlコマンドの基本的な使い方から応用例まで、さまざまな機能について詳しく解説しました。

特に、リクエストのカスタマイズやSSL/TLS通信の扱い、プロキシサーバーの利用方法など、実践的な知識を身につけることができました。

これを機に、curlを活用してAPIとの連携やファイルのダウンロード、自動化スクリプトの作成に挑戦してみてください。

  • URLをコピーしました!
目次から探す