通过perl Mechanize获取有关文件附件的信息

通过perl Mechanize获取有关文件附件的信息,perl,mechanize,Perl,Mechanize,背景 我正在一个网络论坛上试用Mechanize。论坛的线程中有一些文件附件。附件可以是各种介质类型。每个附件都有一个指向名为“attachment.php?”的服务器端程序的链接和一个唯一的标识文件的id。在普通浏览器中访问该文件时,将返回一个文件,由浏览器决定如何处理该文件。如果是图像,则文件将显示在浏览器窗口中,标题栏将设置为文件名。如果是另一种类型的文件,浏览器将询问您是否要下载该文件(并自动将文件名设置为文件名) 问题 我的问题是如何使用Mechanize了解此类文件附件的详细信息,以

背景

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

问题

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


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

要检查文件类型,必须使用
$mech->res()
。它返回一个对象,该类提供
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()
并不能解释为什么它会有帮助。人们可以从代码中看出这一点,但为什么不说出来呢。我已编辑,请根据需要进行清理/调整。(如果您不喜欢,也可以恢复到以前的版本。:)您可以通过单击“编辑”来操作版本控制。。。用户名上方。我更喜欢您的调整,感谢您抽出时间帮助我改进问题/答案。我会把这件事考虑到以后的问题上。干杯。如果你想了解更多细节,可以包括从哪里获得的信息。响应中有时会有一个包含原始文件名的HTTP头,也可以从内容类型头推断类型。