- ベストアンサー
モジュールを使わずhttpデータ取得
UNIX,LINUX,WinのPerlで動きなおかつ、モジュール(lwpなど)を使わずhttpデータ取得したいのですが何かいいサンプルなどないでしょうか? お手数おかけしますが、よろしくお願いします!
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
LWP を使用しないわけは何ですか?素直に使用して方がいいですよ。 面倒なコーディングをしなくていいので。とりあえず以下にサンプル を付けますがエラー処理を省いています。 #! /usr/local/bin/perl #webサーバ名の取得 ($remotehost) = @ARGV; if ($remotehost eq ''){ $remotehost = 'localhost'; } #ソケットに与えるパラメータの用意 $AF_INET = 2; $SOCK_STREAM = 1; $sockaddr = 'S n a4 x8'; chop($localhost = "localhost"); ($name, $aliases, $proto) = getprotobyname('tcp'); ($name, $aliases, $port) = getservbyname('http', 'tcp'); ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($localhost); ($name, $aliases, $type, $len, $thataddr) = gethostbyname($remotehost); $this = pack($sockaddr, $AF_INET, 0, $thisaddr); $that = pack($sockaddr, $AF_INET, $port, $thataddr); #ソケットの作成と接続 if (socket(S, $AF_INET, $SOCK_STREAM, $proto)){ print "socket ok\n"; } else { die $!; } if (bind(S, $this)){ print "bind ok\n"; } else { die $!; } if (connect(S, $that)){ print "onnect ok\n"; } else { die $!; } #ソケットのフラッシュ select(S); $| = 1; select(STDOUT); # flush S print "GET /index.html\n\n"; print S "GET /index.html\n"; do { $msg = <S>; if(eof(S)){ exit; } print STDERR $msg; } until $msg != "";
お礼
環境に依存するようなモジュールはできるだけ利用したくなかった 為、こういったものを探してました。 ありがとうございました。 無事解決できました!