【问题标题】:save directly to file and get filename using WWW::Mechanize使用 WWW::Mechanize 直接保存到文件并获取文件名
【发布时间】:2021-10-08 15:20:47
【问题描述】:

我通常会使用这个保存到文件中:

$mech->save_content($mech->response->filename);

但由于一些导致“内存不足”的大文件,我不得不改用它:

$mech->get( $url, ":content_file"=>$tempfile );

我怎样才能用第二种方法得到文件名,还是必须自己编一个?

我想要在响应对象中返回的文件名:$mech->response->filename。我不想编造自己的文件名。

【问题讨论】:

    标签: perl out-of-memory mechanize


    【解决方案1】:

    :content_file 选项 is inherited from LWP::UserAgent 的行为方式相同。您事先并不知道该文件。

    可以发出 HEAD 请求来检查文件名,然后发出 GET 请求。

    或者,查看 LWP::UserAgent 附带的 the lwp-download utility。它提供了您所需要的。您可以直接使用它,也可以从中取出您想要的东西。可以将 WWW::Mechanize 对象放入此代码中,其行为与 LWP::UserAgent 完全相同。

    【讨论】:

    • 我想要在响应对象中返回的文件名:$mech->response->filename。我不想编造自己的文件名。
    • @CJ7 已更新。我还刚刚提交了a PR to Mech 以将$tempfile 更改为$filename,因此它与LWP 文档一致。
    • 我必须这样做:$mech->get( $url, ":content_file" => "$filename" ) 注意$filename 周围的双引号。否则我会收到错误A :content_file value can't be a reference。你知道为什么吗?
    • 我注意到的另一件事是 $mech->head 不适用于相对 URL,即使 $mech->base 是正确的。
    • @CJ7 我已经调查了 HEAD 问题。它从未在 Mech 中实现过,因此它继承自 LWP,其中没有自动处理相对 URL。我现在正在准备PR。如果获得批准,我们应该很快就会有一个新版本。
    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2023-03-12
    • 2019-03-02
    • 2011-11-29
    相关资源
    最近更新 更多