[Linux] curlコマンドの使い方 – Webサーバーとの通信処理
curlコマンドは、LinuxでWebサーバーとの通信を行うためのツールです。
HTTPやHTTPSなどのプロトコルを使用して、リクエストを送信し、レスポンスを取得できます。
基本的な使い方は curl URL
で、指定したURLに対してGETリクエストを送信します。
POSTリクエストを送信する場合は curl -X POST URL
や curl -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
このコマンドでは、name
とage
のデータを指定したURLに送信します。
PUTリクエストの送信
PUTリクエストは、指定したリソースを更新するために使用されます。
以下のように実行します。
curl -X PUT -d "name=Jane" http://example.com/api/user/1
このコマンドでは、ユーザーIDが1のリソースのname
をJane
に更新します。
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
このコマンドでは、username
とpassword
のフォームデータを指定した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コマンドの基本的な使い方から応用例まで、さまざまな機能について詳しく解説しました。
特に、リクエストのカスタマイズやSSL/TLS通信の扱い、プロキシサーバーの利用方法など、実践的な知識を身につけることができました。
これを機に、curlを活用してAPIとの連携やファイルのダウンロード、自動化スクリプトの作成に挑戦してみてください。