【问题标题】:Mojolicious not following redirection from webarchive.orgMojolicious 不遵循来自 webarchive.org 的重定向
【发布时间】:2013-12-14 20:32:55
【问题描述】:

我正在使用 Mojolicious DOM 和 UserAgent 从 Webarchive.org 获取页面源,对其进行解析,然后将其导入 Dotclear 数据库(使用 webarchive 作为备份)。 在源代码中,有“上一个”和“下一个”链接允许访问最初在博客上发布的不同帖子。

我开发的 perl 脚本应该通过这些链接运行以导入此博客快照的所有页面。 它首先获取博客第一篇文章的来源,对其进行解析,将结果放入本地数据库中,并获取“Next”下的链接在下一篇文章中执行相同的操作,直到没有更多的“Next”帖子。

至于基地。

但诀窍是我从源获得的链接不是 Webarchive 的链接。 Webarchive 的快照链接如下所示:

http://web.archive.org/web/20131012182412/http://www.mytarget.com/post?mypost

“web”和原始 URL 之间的大数字是(我猜)快照的制作日期。诀窍是它在每个快照中都会发生变化,尽管它可能出现在一个帖子上,但下一个帖子已在另一个日期进行了快照。所以 URL 不适合。

当我单击从源获得的链接时,它会将我带到 webarchive.org,它会自动搜索我通过的页面,并将我重定向到它。 但是当我尝试通过 Mojolicious 的 get() 函数获取源代码时,它只是获取了 webarchive 的“Page not found”页面。

那么,我的问题是:有没有办法让 mojolicious 跟随 webarchive 的重定向?我在我的 UserAgent 上激活了 max_redirects(5),但还是一样。

这是我的代码:

sub main{
    my ($url) = @_;
    my $ua = Mojo::UserAgent->new;
    $ua = $ua->max_redirects(5);
    my $dom = $ua->get($url)->res->dom;

    #...Treatment and parsing of the source ...
    return $nextUrl;
}

my $nextUrl="http://web.archive.org/web/20131012182412/http://www.mytarget.com/post?mypost";
my $secondUrl;

while ($nextUrl){
    $secondUrl = main($nextUrl);
    $nextUrl = $secondUrl;
}

提前谢谢...

【问题讨论】:

  • 也许将 MOJO_USERAGENT_DEBUG 环境变量设置为 1 会为您提供一些见解。
  • 似乎是个有趣的问题,你能发一个更真实的链接让我试试吗?

标签: perl url redirect mojolicious


【解决方案1】:

我终于找到了解决办法。 我使用这段代码跟踪 URL 并获取最终到达的 URL:

use LWP::UserAgent qw();    
my $ua = LWP::UserAgent->new;
my $ret = $ua->get($url);
$url = $ret->request->uri ."";    
print "URL returned: ".$url."\n";

然后我使用该 URL 来获取源代码并获取它。

【讨论】:

    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多