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

Rob*_*nes 3 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*ash 5

URI - 用于构建
HTML :: TreeBuilder - 用于解析.