Perlでhostを指定してHTTPアクセスする

apacheで名前ベースのVirtualHost設定したときとかにperlあたりで楽に確認する方法ないかなーと思ってた。さすがにいちいちtelnetするのは古臭い。ってか面倒。

$ telnet example.com 80
GET / HTTP/1.1
host: vhost1.example.com

たぶん一番てっとり早いのはlwp-request?

$ GET example.com -H 'host: vhost1.example.com'

これでも良かったんですけど、せっかくなので純粋*1perlだけでどうやるのか調べた。perldocでHTTP::RequestとかLWP辺りを見るとサンプル載ってるのですぐできますね。便利。

#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;

my $server = shift;
my $host = shift;

my $ua = LWP::UserAgent->new;
$ua->timeout(5);
$ua->default_headers->push_header('host' => "$host");
my $response = $ua->get("$server");
print $response->status_line . "\n\n" ;
print $response->content ;

レスポンスコードとソース一緒に表示しても、意味ないけどまぁいいや。

*1:lwp-request自体perlでできてるので、"純粋"っていう表現は間違ってることに気付いたけど気にしない