我有代码:
#!/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下载它?
那么如何下载该标题中的文件?
谢谢,
科迪古德曼答案 0 :(得分:3)
提交表单后,您可以使用:
$ mech-> save_content($ filename)
将$ mech->内容的内容转储到$ filename中。 $ filename将是 覆盖。如果有任何错误,则死亡。
如果内容类型不以“text /”开头,则内容为 以二进制模式保存。
答案 1 :(得分: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,就可以轻松获取它,然后将响应内容写入文件。 e.g。
if ( ! open( FOUT, ">output.bin" ) ) {
die( "Could not create file: $!" );
}
binmode( FOUT ); # required for Windows
print( FOUT $m->response->content() );
close( FOUT );
答案 2 :(得分:0)
最让我失望的是“mechanize-> form_number”子程序从1开始,而典型的程序从0开始索引。如果有人想知道如何下载响应头,或下载标题附件,这是实现此目的的方法。
现在这里是我想要的完整代码。
#!/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 );