≪ 夏バテな予感… |メインページへ戻る| 好きに書いてもいいじゃん ≫
#!/usr/bin/perlPerlのパスはサーバの環境に合わせて変更しましょう。Socketを使う旨を宣言しています。
use Socket;
use Encode;アタシの場合サイトをUTF-8でエンコーディングしているので、吐き出すJavaScriptもUTF-8にする必要があります。ってなワケで、先の指定に加え加え、上のようにEncodeの使用を宣言しています。吐き出す結果もEUC-JPのままでよければ、Encodeは必要ありません。
use Encode qw/from_to/;
binmode STDERR,"encoding(euc-jp)";
$host = 'www.SomeWeatherSource.feed.or.domain';関数getservbyname()の使い方はPHPと同じです。最初の引数にサービス名、次にプロトコル名を与え、対象となるポート番号を得ます。関数inet_aton()は引数にホスト名から4バイトの構造体としてのIPアドレスを得ます。構造体のままでかまわないのかと言う疑問が一瞬沸くかも知れませんが、内部処理でハンドリングされるのでこのままでかまいません。関数pack_sockaddr_in()には最初の引数にポート番号、次に構造体で表された構造体を渡します。これで接続先のソケット・アドレスが生成されます。
#上のネタ元は適当に読み替えてくださいな
$port = getservbyname('http', 'tcp');
$ipAddr = inet_aton($host);
$socketAddr = pack_sockaddr_in($port, $ipAddr);
socket(FH, PF_INET, SOCK_STREAM, 0);関数socket()の最初の引数がファイルハンドルです。任意の名前でかまいません。二番目の引数では、利用するプロトコル・ファミリを指定します。インターネット通信ですのでPF_INET(ARPAのインターネット・プロトコル)を指定します。三番目の引数にはタイプを指定します。この場合、TCPを利用するのでSOCK_STREAMを指定します。四番目の引数のプロトコル番号には、ゼロを指定します。関数connect()で接続を開始します。最初の引数には先で指定したファイルハンドル、二番目の引数にpack_sockaddr_in()で指定したホストとポートを渡します。出力用のファイルハンドルをselect()で指定します。$|は現在selectされているファイルハンドルに対する特殊変数です。$|に1を指定することでバッファリングをOFFにします。
connect(FH, $socketAddr);
select(FH);
$| = 1;
select(STDOUT);
print FH "GET /index.html HTTP/1.0\r\n\r\n";Telnetと同じですね。GETしたいファイルを指定し、HTTPのバージョンを出力し続けてお約束の空行が2行。最初のwhileはHTTPヘッダを読み飛ばしています。次のwhileで変数$tmpStringにコンテンツ(HTMLファイルの中身)を落としています。
while (<FH>){m/^\r\n$/ and last;}
while (<FH>){$tmpString .= $_;}
#!/usr/bin/perl
use Socket;
$host = 'some.domain.com';
$port = getservbyname('http', 'tcp');
$ipAddr = inet_aton($host);
$socketAddr = pack_sockaddr_in($port, $ipAddr);
socket(FH, PF_INET, SOCK_STREAM, 0);
connect(FH, $socketAddr);
select(FH);
$|=1;
select(STDOUT);
print FH "GET /index.html HTTP/1.0\r\n\r\n";
while (<FH>){m/^\r\n$/ and last;}
while (<FH>){$tmpString .= $_;}
print <<HERE;
Content-Type: text/html; charset=EUC-JP
Content-Language: ja
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Last-Modified: Sat, 01 Jan 2000 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
$tmpString
HERE
exit;
|by Nagarazoku : 16:54|コメント (0)|トラックバック (0)|
トラックバック・スパム対策のため、このBLOGへのリンクを持たないページから送られたトラックバックは自動的に拒否されます。悪しからずご了承ください。
また、このエントリと全然関係の無い内容のページからのトラックバックは、アタシ的な判断で勝手に削除します。これも又、ご了承くださいマセ。