はじめに
Web テストは、通常の HTTP の動作を理解することから始まります。接続の成功、ステータスコード、応答のメタデータ、ページ内容は、それぞれ異なる情報を示します。
この実習では、curl で GET と HEAD リクエストを調べるためのローカル Web サービスを提供します。ディレクトリの推測、インジェクション、認証の回避は行わず、応答を読み、有用なヘッダーと内容を保存します。
HTTP リソースとそのステータスを読む
このステップでは、curl でローカル HTTP リソースを調べ、アプリケーションのステータスと接続成功を区別します。
Kali に入り、共有ワークスペースを選びます。
kali
cd /home/labex/project
http://127.0.0.1:8080/scope.txt のような URL は、スキーム(http)、ホスト(127.0.0.1)、省略可能なポート(8080)、パス(/scope.txt)を示します。ホストとポートはサービスを、パスはその中のリソースを選びます。
curl は URL にリクエストを送ります。既定の HTTP メソッドは GET で、リソースの表現を要求します。演習ページを要求します。
curl http://127.0.0.1:8080/
応答本文は、タイトル Kali Training Welcome を含む HTML ページです。curl は Web ブラウザーのように描画せず、本文をテキストとして表示します。
-i は表示出力に応答ヘッダーを含めます。作業範囲のリソースを調べます。
curl -i http://127.0.0.1:8080/scope.txt
ステータス行は 200 OK を示し、ヘッダー、空行、本文 Authorized local training only. が続きます。HTTP ヘッダーは応答を説明し、本文はその内容を運びます。
提供されたサーバーにないパスを要求します。
curl -i http://127.0.0.1:8080/missing
短い本文と 404 Not Found が返ります。TCP 接続と HTTP 通信自体は成功しており、アプリケーションが要求されたリソースの不在を報告しています。ステータスに応じて失敗させるオプションがなければ、curl は HTTP 404 でも正常終了することがあります。完了した要求がすべて有効なリソースを得たとは想定せず、応答ステータスを読んでください。
-o は本文を指定ファイルに書きます。-s は進捗表示を隠し、-S は転送失敗時のエラーを表示します。合わせて -sS と指定できます。作業範囲のテキストを保存します。
curl -sS -o scope.txt http://127.0.0.1:8080/scope.txt
cat scope.txt
想定される出力:
Authorized local training only.
手入力の説明ではなく、応答本文を保存できました。
応答ヘッダーと本文を別々に保存する
このステップでは、GET と HEAD を比較し、サーバーのヘッダーとページを別々の成果物として保存します。
-I(大文字の I)は、curl に HEAD リクエストを送らせます。HEAD はリソース本文を転送せず、応答のメタデータを要求します。
curl -I http://127.0.0.1:8080/
200 OK、Content-Type: text/html、演習サイトのヘッダーを探してください。応答には HTML 本文を含みません。Content-Length ヘッダーは、対応する GET 本文の大きさを示す場合があります。
実際の内容が必要なら GET を使います。curl の -D は後に続くファイル名に応答ヘッダーを、-o は別ファイルに本文を書きます。
curl -sS -D response-headers.txt -o page.html http://127.0.0.1:8080/
保存したメタデータを読みます。
cat response-headers.txt
成功のステータス、HTML のコンテンツタイプ、X-Training-Site: guided-web があるはずです。サーバーと日付のフィールドは異なる場合があります。
本文を別に読みます。
cat page.html
想定される内容:
<html><title>Kali Training Welcome</title><body>Local practice site.</body></html>
ヘッダーと本文は、異なる問いに答えます。前者はサーバーがどう応答したかを説明し、後者は要求したリソースを含みます。分けておくと、後の比較やテキスト処理が容易になります。
まとめ
URL の構成要素を解釈し、GET と HEAD リクエストを送り、HTTP ステータスと接続成功を区別し、ヘッダーと本文を調べました。後で分析できるよう、元の応答メタデータとページ内容を別々に保存しました。

