どうやら、URIモジュールのnew_absってメソッドに
相対URLとBaseURLを渡すと絶対URLを返してくれますよん。
ってことなんだって。
じゃ、BaseURLをどうしてゲットすりゃいいのかって話になると
LWP::UserAgentオブジェクトでgetとかpostした後でbaseメソッドで
取り出せるんですね。
ここいらの話を使ってコードを書いてみるとこんな感じ。
#!/usr/bin/perl#!/usr/bin/perl
use strict;
use warnings;
use URI;
use LWP;
#適当に階層の深そうなアドレスを用意してみる。
my $uri = URI->new('http://search.cpan.org/~gaas/URI-1.38/URI.pm');
my $UA = LWP::UserAgent->new();
my $response = $UA->get($uri);
#下記相対URLを絶対URLに直してみる。
my @list = qw(./1.html ./../2.html ./../../3.html ./hoge/0.html);
for my $list (@list){
print URI->new_abs($list, $response->base), "\n";
}
実行してみるとこうなる。
http://search.cpan.org/~gaas/URI-1.38/1.html
http://search.cpan.org/~gaas/2.html
http://search.cpan.org/3.html
http://search.cpan.org/~gaas/URI-1.38/hoge/0.html
なるほろね。
おまけ。
URIモジュールといえば、アドレスを分解するのに
非常に便利いいのでここにのっけておく。。
#!/usr/bin/perl#!/usr/bin/perl
use strict;
use warnings;
use URI;
my $u = URI->new('http://www.cpan.org/authors/00whois.html#hogehoge');
print "scheme:", $u->scheme, "\n";
print "opaque:", $u->opaque, "\n";
print "path:", $u->path, "\n";
print "frag:", $u->fragment, "\n";
print "host:", $u->host, "\n";
実行結果は
scheme:http
opaque://www.cpan.org/authors/00whois.html
path:/authors/00whois.html
frag:hogehoge
host:www.cpan.org
0 件のコメント:
コメントを投稿