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

标签 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但不确定它是否具有我需要的所有功能。

最佳答案

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

关于perl - 如何在 Perl 中构建和解析 HTTP URL/URI/路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667229/

相关文章:

perl - 日期转换

mysql - 将 Perl SQL 查询的输出保存到散列而不是数组

python - 编写 Python 音乐流媒体

json - Alamofire 在解包可选时意外发现 nil,但我可以看到 JSON

azure - HTTPS 请求始终发送到 Azure Service Fabric VM 规模集中的同一节点

Perl 包使用 - 双大端?

python - 有没有办法使用 Perl 或 Python 检索进程统计信息?

regex - 在 Perl 中,如何使用正则表达式替换运算符替换子字符串中的非 ASCII 字符?

http - 为什么 postman 会删除表单发布数据?

http - 使用 Noir 的基本 HTTP 身份验证