cURLとは
cURLとは、コマンドラインからHTTPなどのリクエストを発行し、レスポンスを取得するためのツールです。
cURLは「Client URL」の略で、幅広いプロトコル(HTTP、HTTPS、FTPなど)に対応しています。
HTTPリクエストの計測は、Webアプリケーションのパフォーマンスや応答時間の把握、トラブルシューティングにおいて重要な役割を果たします。
そのため、開発者や運用担当者にとって不可欠なスキルと言えるでしょう。
本記事では、cURLを導入していると利用出来る「curl」コマンドを用いた具体的な計測方法やその意義について、プロトコルをHTTPに絞って解説します。
HTTPリクエストとは
HTTPリクエストとは、クライアント(主にWebブラウザ)からサーバーに送信されるデータの要求です。
例えば、ブラウザで特定のWebページにアクセスする際、そのページのコンテンツを取得するためにHTTPリクエストが送信されます。
HTTPリクエストには、GET、POST、PUT、DELETEなどのメソッドがありますが、最も一般的なのはGETとPOSTです。GETはリソースの取得、POSTはデータの送信に用いられます。
curlコマンドを使った計測の基本
HTTPリクエストの計測には、curlコマンドに様々なオプションを組み合わせて使用します。ここでは、基本的な使用方法と、特定の計測目的に応じたオプションの使用例を説明します。
基本的なHTTPリクエスト
まず、基本的なHTTP GETリクエストを送信する方法をご紹介します。以下のコマンドを実行することで、指定したURLの内容を取得できます。
|
$ curl http://example.com |
このコマンドにより、http://example.comに対するGETリクエストが送信され、そのレスポンスが標準出力に表示されます。
応答時間の計測
HTTPリクエストの応答時間を計測するには、-w(–write-out)オプションを使用します。このオプションは、特定の変数を表示するために使用されます。以下の例では、リクエストの完了に要する時間の計測方法を示します。
|
$ curl -w "Total Time: %{time_total}\n" -o /dev/null -s http://example.com |
このコマンドは、リクエストの完了までに要した総時間(%{time_total})を表示します。また、-o /dev/nullはレスポンスボディを無視し、-sは進捗情報やエラーメッセージを非表示にします。
詳細なタイミング情報の取得
より詳細なタイミング情報を取得するために、-wオプションで複数の変数を指定することができます。以下の例では、名前解決に要した時間、サーバーへの接続に要した時間、データ転送開始までの時間、リクエスト全体の時間を表示します。
|
$ curl -w "Name Lookup Time: %{time_namelookup}\nConnect Time: %{time_connect}\nStart Transfer Time: %{time_starttransfer}\nTotal Time: %{time_total}\n" -o /dev/null -s http://example.com |
オプションの解説
– Name Lookup Time:名前解決に要した時間
– Connect Time:サーバーへの接続に要した時間
– Start Transfer Time:データ転送開始までの時間
– Total Time:リクエスト全体の時間
– -o /dev/null
:取得したデータを/dev/null(ヌルデバイス)に出力します。
ここでは、実際のデータは表示せず、計測結果のみを表示するために使用されます。
– -s
:curlの進行状況を表示しません。(silent mode)
これにより、各段階での時間を細かく把握することができます。
curlコマンドの実用的な使用方法
続いてより実用的なcurlを使用する方法についていくつかの例を挙げて説明いたします。
サイトのパフォーマンス計測
Webサイトのパフォーマンスを定期的に計測することは、ユーザーエクスペリエンスの向上に繋がります。以下のスクリプトは、特定のWebページの応答時間を定期的に計測し、ログファイルに記録します。
|
#!/bin/bash URL="http://example.com" LOGFILE="performance.log" while true; do echo "$(date): $(curl -w "%{time_total}\n" -o /dev/null -s $URL)" >> $LOGFILE sleep 60 done |
このスクリプトは、1分ごとに指定したURLの応答時間を計測し、ログファイルに追記します。
例
2024年 5月 29日 水曜日 15:56:40 JST: 0.028877
2024年 5月 29日 水曜日 15:57:40 JST: 0.026837
APIのレスポンスタイムの監視
APIのレスポンスタイムを監視することも重要です。以下の例では、JSON形式のレスポンスを受け取るAPIの応答時間を計測し、特定の閾値を超えた場合にアラートを発生させます。
|
#!/bin/bash URL="http://api.example.com/endpoint" THRESHOLD=0.5 RESPONSE_TIME=$(curl -w "%{time_total}" -o /dev/null -s $URL) if (( $(echo "$RESPONSE_TIME > $THRESHOLD" | bc -l) )); then echo "Warning: Response time $RESPONSE_TIME exceeds threshold $THRESHOLD" fi |
このスクリプトは、APIのレスポンスタイムが0.5秒を超えた場合に警告メッセージを表示します。
例
Warning: Response time 0.67815 exceeds threshold 0.5
curlコマンドの高度な使用方法
curlコマンドは、単純なリクエスト送信以外にも多くの高度な機能を持っています。ここでは、いくつかの高度な使用方法について説明いたします。
HTTPヘッダーの表示
リクエストおよびレスポンスのヘッダー情報を表示するには、-i(リクエストとレスポンスの両方のヘッダーを表示)または-I(レスポンスヘッダーのみを表示)オプションを使用します。
|
$ curl -i http://example.com |
また、特定のヘッダーを追加する場合には、-Hオプションを使用します。
|
$ curl -H "User-Agent: MyApp" http://example.com |
認証の使用
認証が必要なリクエストを送信する場合、curlは様々な認証方法に対応しています。ベーシック認証を使用する場合は、以下のように-uオプションを用います。
|
$ curl -u username:password http://example.com |
Bearerトークンを使用する場合は、-Hオプションでヘッダーを追加します。
|
$ curl -H "Authorization: Bearer your_token" http://api.example.com |
まとめ
本記事では、curlコマンドを用いたHTTPリクエストの計測方法について、基本的な使用方法から応用的なテクニックまでを説明しました。
curlコマンドはそのシンプルさと柔軟性から、様々な場面で活用できる強力なツールです。
繰り返しになりますが、HTTPリクエストの計測は、WebサイトやAPIのパフォーマンスの評価に不可欠な作業です。
実際の業務において、curlコマンドを駆使して効率的にHTTPリクエストの計測を行い、システムのパフォーマンス向上に役立てていただければ幸いです。