2009-11-13 17 views
5

मैं कोड है:मैं एक फॉर्म सबमिट करने के बाद WWW :: मैकेनाइज के साथ एक फ़ाइल कैसे डाउनलोड करूं?

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

यह पृष्ठ पर डाउनलोड बटन सबमिट करता है, लेकिन मैं कैसे फ़ाइल जो वापस पोस्ट करने के बाद भेज दिया जाता है डाउनलोड करने के लिए यकीन नहीं है।

यदि संभव हो तो मैं इसे wget के साथ डाउनलोड करने का एक तरीका चाहता हूं। मैं सोच रहा था कि उनका एक गुप्त यूआरएल पास हो सकता है या कुछ? या मुझे इसे प्रतिक्रिया स्ट्रीम से सीधे एलडब्ल्यूपी के साथ डाउनलोड करना होगा?

तो मैं उस शीर्षलेख में फ़ाइल को कैसे डाउनलोड करूं?

धन्यवाद,

कोड़ी गुडमैन

उत्तर

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

जब मैंने 6 पेजों की पीडीएफ फ़ाइल डाउनलोड करने के लिए इसका इस्तेमाल किया, तो ऐसा हुआ, लेकिन सामग्री किसी भी विचार को खाली कर दी गई थी? क्या गलत हुआ। – msinfo

+0

ओह! $ mech-> save_content ($ filename, binmode => 'कच्चे', decoded_by_headers => 1); इससे मुझे – msinfo

1

मैं अपने कोड की कोशिश की और यह एचटीएमएल के ढेर, जिनमें से केवल 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. आउटपुट एचटीएमएल पढ़ें और यह निर्धारित करें कि आगे क्या करना है, आपने ऐसा नहीं किया है, और इसलिए आपने अपूर्ण प्रश्न पूछा है। जब तक आप उस यूआरएल की पहचान करें जिसे आप डाउनलोड करना चाहते हैं तो आप किसी और को प्रोग्राम लिखने के लिए कह रहे हैं।

आपके द्वारा URL आप इसे डाउनलोड की पहचान कर लेने इसे प्राप्त करने के लिए और फिर एक फ़ाइल के जवाब सामग्री लिखने के एक साधारण मामला है। जैसे


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

यूआरएल जानकारी फ़ाइल डाउनलोड करने के लिए शामिल नहीं है। फ़ाइल मैं तुम्हें HTTP .. कोई फ़ाइल जादुई हेडर में अंतर्निहित है के बारे में उलझन न लगे एक डाउनलोड लगाव – Codygman

+0

के रूप में हेडर में है।यह संभव है कि हेडर में रीडायरेक्ट वापस कर दिया गया हो, इस मामले में आपको हेडर प्रिंट करना चाहिए और फ़ाइल के यूआरएल को डाउनलोड करने के लिए निकालना चाहिए। –

+0

ठीक पीपी, मुझे वास्तव में http के लिए आरएफसी पढ़ने के लिए घूमने की आवश्यकता है और मुझे आपका अधिकार है। मैंने सोचा कि "हेडर अटैचमेंट" का अर्थ है कि यह हेडर में एम्बेडेड था। मैं आगे बढ़ूंगा और हेडर पढ़ूंगा और देख सकता हूं कि मैं रीडायरेक्ट का पता लगा सकता हूं या नहीं। आपकी सहायताके लिए धन्यवाद! – Codygman

3

पर्चे को जमा करने के बाद, आप उपयोग कर सकते हैं:

$ mech-> save_content ($ फ़ाइल का नाम)

$ फ़ाइल नाम में $ mech- की सामग्री> सामग्री डंप। $ filename ओवरराइट किया जाएगा। अगर कोई त्रुटि हो तो मर जाता है।

सामग्री प्रकार के साथ शुरू नहीं होता है "text /", तो सामग्री द्विआधारी मोड में बचाया है।

स्रोत: http://metacpan.org/pod/WWW::Mechanize

+0

इस उत्तर के लिए धन्यवाद। हालांकि मैं सीपीएएन पेज पर सही दिख रहा था, मुझे यह याद आया, और जब तक मुझे तुम्हारा पता नहीं चला, तब तक मुझे बहुत सारे खराब Google परिणामों से गुजरना पड़ा। –

संबंधित मुद्दे