Perlにおいて、**HTTP::Server::Simple** モジュールは軽量なHTTPサーバの実装を可能にします。このモジュールはシンプルで使いやすく、開発やテストに適しています。以下では、このモジュールを使ってHTTPサーバを設定する方法を紹介します。
HTTP::Server::Simpleのインストール
まず、CPANから **HTTP::Server::Simple** モジュールをインストールします。以下のコマンドを使用してください:cpan HTTP::Server::Simpleまたは、`cpanm` を使用している場合、次のコマンドが有効です:
cpanm HTTP::Server::Simple
基本的なHTTPサーバの作成
以下のコードは、ポート8080で動作し、「こんにちは、世界!」というメッセージを返す簡単なHTTPサーバを作成する例です。
use strict;
use warnings;
use HTTP::Server::Simple::CGI;
package SimpleWebServ;
our @ISA = ('HTTP::Server::Simple::CGI');
sub process_request {
my ($self, $cgi) = @_;
print "HTTP/1.0 200 OK\r\n";
print $cgi->header,
$cgi->start_html('Welcome'),
$cgi->h1('こんにちは、世界!'),
$cgi->end_html;
}
my $srv = SimpleWebServ->new(8080);
print "サーバは http://localhost:8080 で稼働中\n";
$srv->run();
上記のコードは、**HTTP::Server::Simple::CGI** クラスを継承した `SimpleWebServ` サーバクラスを作成し、リクエスト処理メソッドをオーバーライドしています。
サーバ機能の拡張
リクエストパスに基づいて異なるコンテンツを返すように、`process_request` メソッドを拡張できます。
use strict;
use warnings;
use HTTP::Server::Simple::CGI;
package EnhancedServ;
our @ISA = ('HTTP::Server::Simple::CGI');
sub process_request {
my ($self, $cgi) = @_;
my $req_path = $cgi->path_info;
if ($req_path eq '/greet') {
print "HTTP/1.0 200 OK\r\n";
print $cgi->header,
$cgi->start_html('Greeting'),
$cgi->h1('こんにちは!'),
$cgi->end_html;
} elsif ($req_path eq '/farewell') {
print "HTTP/1.0 200 OK\r\n";
print $cgi->header,
$cgi->start_html('Farewell'),
$cgi->h1('さようなら!'),
$cgi->end_html;
} else {
print "HTTP/1.0 404 Not Found\r\n";
print $cgi->header,
$cgi->start_html('NotFound'),
$cgi->h1('404 - 見つかりません'),
$cgi->end_html;
}
}
my $server_inst = EnhancedServ->new(8080);
print "サーバは http://localhost:8080 で稼働中\n";
$server_inst->run();
このコードは、リクエストパスに応じて異なるレスポンスを生成します。
ログ機能の追加
サーバのデバッグと監視のために、各リクエスト情報をログファイルに記録する機能を追加します。
use strict;
use warnings;
use HTTP::Server::Simple::CGI;
use POSIX qw(strftime);
package LoggableServ;
our @ISA = ('HTTP::Server::Simple::CGI');
sub process_request {
my ($self, $cgi) = @_;
my $request_path = $cgi->path_info;
# リクエスト情報のログ記録
my $log_msg = strftime("[%Y-%m-%d %H:%M:%S]", localtime) . " - $request_path\n";
open my $log_fh, '>>', 'access.log' or die "ログファイルを開けません: $!";
print $log_fh $log_msg;
close $log_fh;
if ($request_path eq '/greet') {
print "HTTP/1.0 200 OK\r\n";
print $cgi->header,
$cgi->start_html('Greeting'),
$cgi->h1('こんにちは!'),
$cgi->end_html;
} elsif ($request_path eq '/farewell') {
print "HTTP/1.0 200 OK\r\n";
print $cgi->header,
$cgi->start_html('Farewell'),
$cgi->h1('さようなら!'),
$cgi->end_html;
} else {
print "HTTP/1.0 404 Not Found\r\n";
print $cgi->header,
$cgi->start_html('NotFound'),
$cgi->h1('404 - 見つかりません'),
$cgi->end_html;
}
}
my $logger_srv = LoggableServ->new(8080);
print "サーバは http://localhost:8080 で稼働中\n";
$logger_srv->run();
このコードにより、各リクエスト情報が `access.log` ファイルに記録され、サーバの動作状況や履歴を確認できるようになります。