Bor*_*din 4 html perl http mojolicious
该HTTP::Response模块具有一种base方法,该方法返回将消息内容中的相对URL转换为绝对URL时要使用的基本URL。它从消息正文(作为<base>HTML内的元素<head>),HTTP标头Content-Location(或过时的Content-Base)或请求的URL(从最近的重定向,如果有)中检索它。
我看不到Mojo::Message::Response提供相同信息的任何方式,如果已经在某个地方,我也不想自己编写代码
谁能帮我吗?
更新 在这一点上我觉得这个框架不具有同等的base距离LWP
我在Mojo :: Headers类中找到content_location方法。的魔::消息::响应从基部继承魔::消息和似乎被拾起以及Mojo::Headers
从简介中添加示例
my $res = Mojo::Message::Response->new;
$res->parse("HTTP/1.0 200 OK\x0d\x0a");
$res->parse("Content-Length: 12\x0d\x0a");
$res->parse("Content-Type: text/plain\x0d\x0a\x0d\x0a");
$res->parse('Hello World!');
say $res->code;
say $res->headers->content_type;
say $res->body;
say $res->headers->content_location // 'location not defined'; # /
$res->headers->content_location('set_some_location');
say $res->headers->content_location // 'location not defined';
Run Code Online (Sandbox Code Playgroud)
似乎有效。这样合适吗 我无法轻易找到要尝试的真实页面。
这不会扫描文档内容,而是仅与标题一起使用。在LWP从原稿台头制造时HTTP ::响应对象,如在问题和下解释base。在我的测试(v5.16)Mojo::UA中没有这样做。我找不到直接的功能。
例如,获取基本URL的一种方法是通过DOM。
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $base_url = $ua->get($url)
->res->dom
->at('head')->at('base')->attr('href');
Run Code Online (Sandbox Code Playgroud)
该方法dom来自Mojo::Messagewhile base,attr位于Mojo :: DOM中。要么
$dom->at('head > base[href]');
Run Code Online (Sandbox Code Playgroud)
它返回一个hashref { href => URL },而第一个示例返回URL。
失败的at回报undef,因此首先需要检查。
这是对内容的另一种手动搜索,但至少针对<head>。
更新资料
我查看了上述组件及其父类的源代码。这也产生了Mojo :: Content,其子类Single由返回Mojo::Message::content,并且Mojo :: UserAgent :: Transactor及其redirect方法使用Mojo :: URL。但是,它们具有不同的目的。总体而言,我发现直接挖掘基本URL没有任何帮助。
在这一点上,我必须得出结论,此处没有像basein 这样的直接功能LWP。
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |