さまざまなポートでの Curl の使用
Curl とポート指定の基本を理解したところで、さまざまなポートとの対話方法を探ってみましょう。
非標準 Web ポートへのアクセス
Web サーバーは、80 および 443 以外のポートで実行できます。テスト目的で、Python の組み込み HTTP サーバーを使用して、ポート 8000 でシンプルな Web サーバーをセットアップしてみましょう。
まず、提供するシンプルな HTML ファイルを作成します。
echo "<html><body><h1>Hello from port 8000!</h1></body></html>" > ~/project/test.html
次に、ファイルを含むディレクトリに移動し、ポート 8000 でシンプルな HTTP サーバーを起動します。
cd ~/project
python3 -m http.server 8000 &
コマンドの末尾にある & は、サーバーをバックグラウンドで実行します。次のような出力が表示されるはずです。
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
次に、Curl を使用して、このサーバーにポート 8000 でアクセスします。
curl http://localhost:8000/test.html
作成した HTML コンテンツが表示されるはずです。
<html>
<body>
<h1>Hello from port 8000!</h1>
</body>
</html>
サーバーが完了したら、そのプロセス ID を見つけて終了することで停止できます。
ps aux | grep "python3 -m http.server"
これにより、次のような出力が表示されます。
labex 1234 0.0 0.1 235368 12312 pts/0 S 10:00 0:00 python3 -m http.server 8000
labex 1235 0.0 0.0 12345 1234 pts/0 S+ 10:01 0:00 grep --color=auto python3 -m http.server
2 番目の列のプロセス ID (この例では 1234) に注意し、プロセスを終了します。
kill $(pgrep -f "python3 -m http.server")
さまざまな HTTP メソッドの使用
Curl では、-X フラグを使用してさまざまな HTTP メソッドを指定できます。POST リクエストを試してみましょう。
curl -X POST http://example.com
これにより、example.com に POST リクエストが送信されます。ほとんどの Web サイトは、POST リクエストには異なるデータが必要であることを示すメッセージで応答します。
リクエストへのヘッダーの追加
API または特定のサービスを操作する場合、カスタムヘッダーを送信する必要があることがよくあります。これは、-H フラグを使用して行うことができます。
curl -H "Content-Type: application/json" http://example.com
これにより、JSON コンテンツタイプヘッダーを含むリクエストが送信されます。応答は、サーバーがこのヘッダーをどのように処理するかに依存します。
レスポンスヘッダーの表示
コンテンツとともにレスポンスヘッダーを表示するには、-i フラグを使用します。
curl -i http://example.com
これにより、次のような出力が表示されます。
HTTP/1.1 200 OK
Content-Encoding: gzip
Accept-Ranges: bytes
Age: 558039
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Wed, 07 Jun 2023 12:34:56 GMT
Etag: "3147526947+gzip"
Expires: Wed, 14 Jun 2023 12:34:56 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dcb/7F5B)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<!-- More HTML content -->
</head>
<!-- More HTML content -->
</html>
ヘッダーは、サーバー、コンテンツタイプ、キャッシュポリシーなどに関する貴重な情報を提供します。