libwwwを使ったプログラミング

 アクセスカウンタや掲示板作るのにperlを覚えた人は僕も含めて多いと思います。しかし、perlは掲示板だけでなく他にも色々面白いことが出来ます。
 ここではlibwwwを使ったプログラミングについて解説します。libwwwを使うとOsakanizeror-ne chekerのようなCGIが作れます。(^^)v

libwwwのインストールの前に

 libwwwをインストールするには、C言語が使えることが必須です。あなたのサーバの管理者にC言語が使えることを確認して下さい。
 C言語が使えない時は、babyAさんhtalkを使うといいんじゃないでしょーか。

libwwwのインストール

 まず、libwww-perlをインストールします。

 libwww-perl-0.40.tar.gzを適当なディレクトリ(例えば/‾foo/libwww/)に展開します。

 sysサブディレクトリを作成します。
   mkdir /‾foo/libwww/sys/

 sys_socket_ph.cをコンパイルします。
   cc sys_socket_ph.c -osys_socket_ph

 sys_socket_phの出力をsysに置きます。
   sys_socket_ph > /‾foo/libwww/sys/socket.ph

 これで、libwwwが使えるようになっているはずです。
 libwwwに含まれているgetで動作確認が出来ます。

プログラム例

 サンプルとして、フォームで指定したページをhttpで取得して表示するCGIを挙げます。

   ソース: get.txt (get.cgiにリネームして使って下さい)
   URL指定用フォーム: get.htm

 では、順番に解説していきましょーか。随時ソースを参照して下さい。

7-8行
 libwwwとlibwwwを呼び出すCGIを別のディレクトリに置く場合、コメントを外します。
 libwwwを使うCGIが複数ある場合などに設定するといいでしょう。

10-12行
 libwwwを使うためにライブラリをインクルードしています。

18行
 サーバーがFIREWALLの中にあるなど、プロキシを使う必要がある場合にコメントを外して下さい。
 プロキシの設定の仕方などはあなたのサーバの管理者にお尋ね下さい。

20行
 メソッドを指定します。HEAD等も使えると思いますが、確認してません。(汗)

22行
 User-Agent名を設定します。CGIの対象になった人に分かるようにCGIのURLを埋め込んでいます。

34-49行
 フォームから渡されたクエリーの解析をしています。

51-54行
 URLが有効なものかどうか判定しています。
 「空」「http://のみ」「http://で始まっていない」のうちのどれか場合、フォームに戻ります。

56行
 相対パス等を指定した場合、絶対パスに直します。
 このCGIでは不必要かと思いますが、libwwwはfile://とかにも対応してるんで...。

58-72行
 リクエストヘッダを設定します。ここでは、Referer,Forwarded,Hostを設定しています。
 Referer,Forwardedは設定しなくてもいいんだけど、匿名プロクシがわりに使われるのを予防ってことで。
 Hostはバーチャルホスト機能を持ったサーバにアクセスするために設定する必要があります。

74行
 httpリクエストを発行して実際にファイルを取得します。
 メソッド、URL、リクエストヘッダ、タイムアウト秒数を設定し、ステータスコードと実体を得ます。
 実体は$contentに入ります。

76-82行
 正常に取得できた場合(ステータス=200)は本来の処理を、エラーの場合にはエラー処理をします。
 今回は両方とも同じ処理してます。(^^;)

終りに

 libwwwを使って何をするかはあなた次第です。Osakanizerの別バージョン作るもよし、全く別のもの作るもよし。
 HTML-lintみたいなチェッカーや懐かしのバーコードバトラーみたいなWebバトラー、頑張ればサーチエンジンも作れるかも?
 まだまだ他にも応用が効くと思います。お互い頑張りましょう!(^^)


index