2009-11-13 78 views
5

我的代碼:如何在提交表單後使用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?

那我怎麼下載是在頭文件?

感謝,

科迪·古德曼

回答

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); 
+0

當我用這個下載一個6頁的pdf文件,它確實,但內容是空白的任何想法?什麼地方出了錯。 – msinfo

+0

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

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

URL不包含的信息來下載文件。該文件在標題中作爲下載附件 – Codygman

+0

我懷疑你可能會對HTTP感到困惑。沒有文件奇蹟般地嵌入到標題中。有可能在頭文件中返回了重定向,在這種情況下,您應該打印頭文件並提取要下載的文件的URL。 –

+0

好吧PP,我確實需要閱讀RFC的HTTP,我相信你的權利。我認爲「頭附件」意味着它被嵌入到頭文件中。 我會繼續閱讀標題,看看我能否找到重定向。謝謝你的幫助! – Codygman

3

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

$ mech-> save_content($文件名)

轉儲$ mech-內容>內容到$文件名。 $ filename將會覆蓋 。如果有任何錯誤,就會死亡。

如果內容類型不首先「文/」,然後將內容保存 以二進制模式。

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

+0

謝謝你的回答。雖然我正在看CPAN頁面,但我錯過了這一點,並且不得不通過很多糟糕的谷歌搜索結果,直到我找到你的結果。 –

相關問題