如何在Perl的Mojo::URL中添加多个路径?

mccptt67  于 8个月前  发布在  Perl
关注(0)|答案(2)|浏览(79)

如何将多个path添加到Mojo::URL对象?请考虑以下示例:

perl -Mojo -E 'say new Mojo::URL("https://httpbin.org/")->path("bytes")->path($_)->to_abs for (1..3)'

所需输出:

https://httpbin.org/bytes/1
https://httpbin.org/bytes/2
https://httpbin.org/bytes/3

实际产量:

https://httpbin.org/1
https://httpbin.org/2
https://httpbin.org/3

->path("bytes/$_")似乎是错误的。

lbsnaicq

lbsnaicq1#

你的例子 * 几乎 * 工作,但问题是,

Mojo::URL->new("https://httpbin.org/")->path("bytes")

构造URL https://httpbin.org/bytes,它的“基”为https://httpbin.org/。当您在其上执行->path("1")时,将相对于基进行解析,这意味着1 * 替换 * bytes
相反,如果你这样做,

Mojo::URL->new("https://httpbin.org/")->path("bytes/")->path("$_")

通过添加/,您可以获得您想要的结果。
这是因为构造HTTP URL的东西不知道什么是“目录”,什么不是,除非URL用斜杠明确表示。这就是为什么传统上,如果您访问的目录路径没有尾随斜杠,Web服务器会将您重定向到以斜杠结尾的URL。

fgw7neuy

fgw7neuy2#

使用Mojo::URL和Path::Tiny的组合

use Mojo::URL;
use Path::Tiny qw/path/;
use feature 'say';

say Mojo::URL->new('https://httpbin.org/')
             ->path( path(bytes => $_ )->stringify )
             ->to_abs
    for (1..3);

相关问题