提交表单后如何使用 WWW::Mechanize 下载文件?

问题描述 投票:0回答:3

我有代码:

#!/usr/bin/perl
use strict;
use WWW::Mechanize;

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292';
my $m = WWW::Mechanize->new(autocheck => 1);
$m->get($url);
$m->form_number(2);
$m->click();
my $response = $m->res();
print $m->response->headers->as_string;

它提交了页面上的下载按钮,但我不知道如何下载POST后发回的文件。

如果可能的话,我想要一种使用 wget 下载此文件的方法。我在想它们可能是传递的秘密网址之类的?或者我必须使用 LWP 直接从响应流下载它?

那么我如何下载该标头中的文件?

谢谢,

科迪·古德曼

perl download form-submit www-mechanize
3个回答
3
投票

提交表格后,您可以使用:

$mech->save_content($文件名)

将 $mech->content 的内容转储到 $filename 中。 $文件名将是 被覆盖。如果有任何错误就会死掉。

如果内容类型不是以“text/”开头,则内容为 以二进制模式保存。

来源:http://metacpan.org/pod/WWW::Mechanize


1
投票

我尝试了你的代码,它返回了一堆 HTML,其中唯一的

http://
引用是:

 http://www.w3c.org
    http://ad.z5x.net
    http://divxsubtitles.net
    http://feeds2read.net
    http://ad.z5x.net
    http://www.google-analytics.com
    http://cls.assoc-amazon.com
使用代码


    my $content = $m->response->content();
    while ( $content =~ m{(http://[^/\" \t\n\r]+)}g ) {
        print( "$1\n" );
    }

所以我对你的评论是:
1. 将

use strict;
添加到您的代码中,否则您的编程将会失败
2. 阅读输出 HTML 并确定下一步要做什么,您还没有这样做,因此您提出了一个不完整的问题。除非确定了您想要下载的URL,否则您就是在要求其他人为您编写程序。

一旦确定了要下载的 URL,获取它然后将响应内容写入文件就很简单了。例如


if ( ! open( FOUT, ">output.bin" ) ) {
    die( "Could not create file: $!" );
}
binmode( FOUT ); # required for Windows
print( FOUT $m->response->content() );
close( FOUT );

0
投票

最让我失望的是“mechanize->form_number”子例程从 1 开始,而典型程序的索引从 0 开始。如果有人想知道如何 下载响应标头,或 下载标头附件 s,这就是这样做的方法。

现在这是执行我想要的操作的完整代码。

#!/usr/bin/perl
use strict;
use WWW::Mechanize;

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292';
my $m = WWW::Mechanize->new(autocheck => 1);
$m->get($url);
$m->form_number(2);
$m->click();
my $response = $m->res();
my $filename = $response->filename;

if (! open ( FOUT, ">$filename" ) ) {
    die("Could not create file: $!" );
}
print( FOUT $m->response->content() );
close( FOUT );
© www.soinside.com 2019 - 2024. All rights reserved.