ネットワークプログラミングの基礎知識
というサイトがある。ネットのお勉強をするにはちょうどいい。ここにごく簡単な、ソケットを使った 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);