如何在Perl中构建和解析HTTP URL的/ URI /路径?

时间:2010-04-19 12:13:40

标签: perl http

我有一个类似wget的脚本,用于下载页面,然后检索该页面上IMG标记中链接的所有文件。

考虑到原始页面的URL以及从该页面中的IMG标记中提取的链接,我需要构建我想要检索的图像文件的URL。目前我使用的是我写的函数:

sub build_url {
    my ( $base, $path ) = @_;

    # if the path is absolute just prepend the domain to it
    if ($path =~ /^\//) {
        ($base) = $base =~ /^(?:http:\/\/)?(\w+(?:\.\w+)+)/;
        return "$base$path";
    }

    my @base = split '/', $base;
    my @path = split '/', $path;

    # remove a trailing filename
    pop @base if $base =~ /[[:alnum:]]+\/[\w\d]+\.[\w]+$/;

    # check for relative paths
    my $relcount = $path =~ /(\.\.\/)/g;
    while ( $relcount-- ) {
        pop @base;
        shift @path;
    }
    return join '/', @base, @path;
}

问题是,我肯定不是第一个解决这个问题的人,实际上这是一个普遍的问题,我认为必须有一些更好,更标准的处理方法,使用核心模块或来自CPAN的东西 - 尽管通过核心模块是可取的。我在考虑File::Spec,但不确定它是否具备我需要的所有功能。

2 个答案:

答案 0 :(得分:5)

URI - 建筑物 HTML::TreeBuilder - 用于解析。

答案 1 :(得分:1)

听起来你可能想要我的HTML::SimpleLinkExtor模块。这就是我用于名为webreaper的类似wget的脚本。