我有代码:
#!/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 直接从响应流下载它?
那么我如何下载该标头中的文件?
谢谢,
科迪·古德曼
提交表格后,您可以使用:
$mech->save_content($文件名)
将 $mech->content 的内容转储到 $filename 中。 $文件名将是 被覆盖。如果有任何错误就会死掉。
如果内容类型不是以“text/”开头,则内容为 以二进制模式保存。
我尝试了你的代码,它返回了一堆 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;
添加到您的代码中,否则您的编程将会失败一旦确定了要下载的 URL,获取它然后将响应内容写入文件就很简单了。例如
if ( ! open( FOUT, ">output.bin" ) ) {
die( "Could not create file: $!" );
}
binmode( FOUT ); # required for Windows
print( FOUT $m->response->content() );
close( FOUT );
最让我失望的是“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 );