【问题标题】:Get information about file attachment via perl Mechanize通过 perl Mechanize 获取有关文件附件的信息
【发布时间】:2016-12-20 17:34:29
【问题描述】:

背景

我正在一个网络论坛上尝试使用 Mechanize。该论坛的主题中有一些文件附件。附件可以是各种媒体类型。每个附件都有一个指向名为“attachment.php?”的服务器端程序的链接。以及标识文件的唯一 ID。当您在普通浏览器中访问它时,会返回一个文件,然后浏览器决定如何处理它。如果是图像,则文件显示在浏览器窗口中,并且标题栏设置为文件名。如果是其他类型的文件,浏览器会询问您是否要下载该文件(并自动将文件名设置为文件名)。

问题

我的问题是如何使用 Mechanize 探索此类文件附件的详细信息,以便确定文件类型和文件名? 我已经使用我的程序成功下载了一个文件,但我必须告诉 Mechanize 文件名应该是什么。我宁愿保留原始文件名,但要做到这一点,我必须能够以某种方式发现它。我知道可以这样做,因为我的浏览器能够确定文件类型和文件名。 作为次要目标,如果可能的话,我还想查询文件的大小。

我希望我的问题有意义,并提前感谢任何花时间回答的人。

【问题讨论】:

  • 通常,您希望显示您正在做的事情的详细信息——在这种情况下,就是您所说的代码。代码,永远。使问题具体而具体的简短(最小)版本。否则我觉得你的问题没问题。
  • 感谢 zdim 的评论。在这种情况下,我的问题涉及一种编程方法,而不是特定代码段的问题,这就是为什么我没有发布我现有的代码。
  • ...但我接受您的批评,从现在开始将在所有情况下发布代码摘录
  • 我明白这一点。这不是真正的批评,更多的信息。始终显示您的代码。

标签: perl mechanize


【解决方案1】:

要检查文件类型,您必须使用$mech->res()。它返回一个HTTP::Response 对象,该类提供了filename 方法。

例子:

foreach (@media)
{   
    print "Fetching " . $_->url() . "\n";
    $m->get($_);
    my $res = $m->res();
    if($res->is_success)
    {
        my $filename = $res->filename();
        print "$filename\n";
    }
}

【讨论】:

  • 同意。我已从答案中删除了这个不必要的文本。
  • 请注意,人们不必为他们的投票提供解释。有时他们会仅通过投票来传达他们的评估,这取决于您弄清楚为什么您会得到 +/-。也许并不理想,但它是一些反馈。我已经用头撞了很多次了。有时,您会得到难以理解的选票,但总的来说有充分的理由。
  • 声明一个人需要$mech->res() 并不能解释为什么它会有所帮助。可以从代码中弄清楚这一点,但为什么不说明这一点。我编辑了,请随意清理/调整。 (如果您不喜欢它,或者恢复到以前的版本。:) 您可以通过单击用户名上方的 edited ... 来操作版本控制。
  • 我更喜欢您的调整,感谢您抽出宝贵时间帮助改进我的问题/答案。我将在未来的问题上考虑这一点。干杯。
  • 如果您想了解更多细节,可以包括它从何处获取该信息。有时响应中有一个 HTTP 头,其中包含原始文件名,类型也可以从内容类型头中推断出来。
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2021-01-05
  • 2013-10-29
  • 1970-01-01
  • 2010-09-22
  • 2018-03-08
  • 2013-12-13
相关资源
最近更新 更多