久々の更新ですが、
仕事をさぼっていた訳では
ありません。
Web系エンジニアであれば
必ずおさえて欲しいスキルのひとつに
ソケット通信があります。
ソケットの概念はネット等で
調べて頂くとして
Web系の言語だと
大体サポートされてます。
用途は下記のように様々です。
・ cronやタスクスケジューラからのバッチ処理
・ MTAからパイプされた後、Webサーバにリクエスト送信
・ 異なるサーバ間の自動通信
などなど
で、今回はそのソケット接続のサンプルを。
unix系サーバを扱う事が多いので
Perlで記載してます。
#!/usr/bin/perl
use Socket;
# 標準入力の取得
chomp($input = <STDIN>);
# IPアドレスの設定
$addr = inet_aton("192.168.1.10");
# 接続先のプログラム・パラメタ指定
$url = "/register.php";
$enval = urlEncode($input);
$prm = "?input=$enval&action=1";
# ソケットの生成
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
# ポート番号の取得
$port = getservbyname('http', 'tcp');
# IP アドレスとポート番号を、構造体に変換
$sock_addr = pack_sockaddr_in($port, $addr);
# サーバに接続
connect(SOCKET, $sock_addr)
or die "192.168.1.10のポート$portに接続できません。\n";
# ファイルハンドル SOCKET をバッファリングしない
select(SOCKET); $| = 1; select(STDOUT);
# WWWサーバにHTTPリクエストを送る
print SOCKET "GET $url$prm HTTP/1.0\r\n\r\n";
close(SOCKET);
sub urlEncode{
# URLエンコードする
my $value = shift;
$value =~s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
$value =~s/\s/+/g;
return $value;
}
サンプルは標準入力を
リクエストパラメタとして
特定のWebサーバに
HTTPでリクエストを送信しています。