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

问题描述:

我的代码:如何在提交表单后使用WWW :: Mechanize下载文件?

#!/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?

那我怎么下载是在头文件?

感谢,

科迪·古德曼

那么这扔我最多的东西是“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); 
+0

当我用这个下载一个6页的pdf文件,它确实,但内容是空白的任何想法?什么地方出了错。 – msinfo

+0

哦! $ mech-> save_content($ filename,binmode =>':raw',decoded_by_headers => 1);这帮了我 – msinfo

我想你的代码,并返回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

URL不包含的信息来下载文件。该文件在标题中作为下载附件 – Codygman

+0

我怀疑你可能会对HTTP感到困惑。没有文件奇迹般地嵌入到标题中。有可能在头文件中返回了重定向,在这种情况下,您应该打印头文件并提取要下载的文件的URL。 –

+0

好吧PP,我确实需要阅读RFC的HTTP,我相信你的权利。我认为“头附件”意味着它被嵌入到头文件中。 我会继续阅读标题,看看我能否找到重定向。谢谢你的帮助! – Codygman

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

$ mech-> save_content($文件名)

转储$ mech-内容>内容到$文件名。 $ filename将会覆盖 。如果有任何错误,就会死亡。

如果内容类型不首先“文/”,然后将内容保存 以二进制模式。

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

+0

谢谢你的回答。虽然我正在看CPAN页面,但我错过了这一点,并且不得不通过很多糟糕的谷歌搜索结果,直到我找到你的结果。 –