ごくごく簡単な HTTP クライアント

ネットワークプログラミングの基礎知識
というサイトがある。ネットのお勉強をするにはちょうどいい。ここにごく簡単な、ソケットを使った HTTP クライアントの例が Perl で書かれていて、そのままちゃんと動く。もとのコードをほぼそのまま載せておく。出力はコンソールではなく、a.txt というテキスト・ファイルとして出力されるところと、ヘッダ部分も出力するところだけがちがうが、その他はそのままコピペであるから、詳しくはもとの記事に当たられたい。

use strict;
use Socket;                                                                     # Socket モジュールを使う
                
my $host = 'www.kyoto-u.ac.jp';                                                 # 接続先ホスト名
my $port = getservbyname('http', 'tcp');                                        # HTTP プロトコルを使う
my $iaddr = inet_aton($host) or die "$host は存在しないホストです。\n";            # ホスト名を、IP アドレスの構造体に変換
my $sock_addr = pack_sockaddr_in($port, $iaddr);                                # ポート番号と IP アドレスを構造体に変換

socket(SOCKET, PF_INET, SOCK_STREAM, 0) or die "ソケットを生成できません。\n";      # ソケット生成
connect(SOCKET, $sock_addr) or die "$host のポート $portに接続できません。\n";      # 指定のホストの指定のポートに接続
select(SOCKET); $|=1; select(STDOUT);                                           # ファイルハンドル SOCKET をバッファリングしない
print SOCKET "GET /index.html HTTP/1.0\r\n";                                    # WWW サーバに HTTP リクエストを送る
print SOCKET "\r\n";

# ボディ部分を受け取り、表示
open(FILE, '> a.txt') or die "$!";
while (<SOCKET>){
  print FILE $_;
}
close(FILE);

Perl でのソケットについてはこちら