2011-12-31 9 views
5

आम तौर पर पृष्ठों एक लॉगिन प्रपत्र हैलॉगिन के बाद रीडायरेक्ट करने वाले पृष्ठों को कैसे डाउनलोड करें?

wget --no-check-certificate --save-cookies cookies --keep-session-cookies \ 
    --post-data="username=example&password=example" \ 
    "https://example.com/index.php?title=Special:Userlogin&returntotitle=" 

wget --no-check-certificate --load-cookies=cookies \ 
    --no-parent -r --level=2 -nc -E \ 
    https://example.com/Special:Sitemap 

साथ डाउनलोड किया जा सकता लेकिन DekiWiki साइटों के मामले में, यह काम नहीं करता, अगर लॉगिन की आवश्यकता है।

समस्या तेजी में man wget

नोट में वर्णित किया जा करने के लिए: अगर Wget रीडायरेक्ट किया जाता है पोस्ट अनुरोध पूर्ण होने के बाद, उसे रीडायरेक्ट URL को पोस्ट डेटा नहीं भेजेंगे। ऐसा इसलिए है क्योंकि POST को संसाधित करने वाले यूआरएल अक्सर नियमित पृष्ठ पर पुनर्निर्देशन के साथ का जवाब देते हैं, जो पोस्ट की इच्छा या स्वीकार नहीं करता है। यह पूरी तरह स्पष्ट नहीं है कि यह व्यवहार इष्टतम है; यदि यह काम नहीं करता है, तो यह भविष्य में बदल सकता है।

प्रश्न

इस जैसे पर्ल का उपयोग कर किया जा सकता है शायद HTML::TreeBuilder 3 या HTML::TokeParser या Mechanize या कोई अन्य पर्ल मॉड्यूल के साथ?

उत्तर

4

लॉगिन करने की आवश्यकता वाले कुछ साइटें कुकी को प्रतिक्रिया के साथ वापस नहीं भेजती हैं।

इसके बजाय वे एक पुनर्निर्देशन प्रतिक्रिया (302 ऑब्जेक्ट मूव) भेजते हैं, जो अधिकांश ब्राउज़र स्वचालित रूप से अनुसरण करते हैं और फिर कुकी को उस रीडायरेक्ट पेज के जवाब में भेजा जाता है।

मैं curl_opt FOLLOW_LOCATION को सक्षम करके कर्ल का उपयोग करता हूं, कमांड लाइन उपकरण के लिए - स्थान विकल्प का उपयोग करता है। यह wget जैसे एक मुफ्त उपकरण है।

curl --cookie cookie.txt --cookie-jar cookie.txt \ 
    --data-urlencode "username=example&password=example" \ 
    --insecure --location https://example.com/index.php?title=Special:Userlogin&returntotitle= -o downloadedfile.html https://example.com/Special:Sitemap 

http://curl.haxx.se/download.html

इसके अलावा, कभी कभी एक लॉगिन प्रपत्र सिर्फ एक आवेदन/x-www फार्म-urlencoded पद के बजाय एक बहु-भाग/फार्म डेटा पद की उम्मीद है। कर्ल बनाने के लिए वह एक बहु-भाग/फॉर्म-डेटा पोस्ट बदलता है --डेटा-urlencode to -F।

+0

बहुत रोचक। क्या साइट को मिरर करना भी संभव है? मेरे उदाहरण में मैं wget की '--no-parent -r --level = 2' का उपयोग करता हूं। –

+1

क्या आपका मतलब मूल पृष्ठ से इंगित सभी पृष्ठों को दोबारा डाउनलोड करना है? नहीं, कर्ल में न ही -r -level = 2 समतुल्य है, हालांकि, libcurl, एक एपीआई इंटरफ़ेस, आसानी से एक HTML पृष्ठ पार्स करने के लिए प्रोग्राम किया जा सकता है, और उस पृष्ठ के सभी लिंक डाउनलोड कर सकते हैं। लिबकर्ल में निम्नलिखित भाषाओं के लिए बाइंडिंग है (और अधिक): सी, सी ++, जावा, लिस्प, .NET, ऑब्जेक्ट-पास्कल, पास्कल, पर्ल, PHP, पायथन, रूबी, विजुअल बेसिक – Motes

+0

@ मॉट्स, "-कुकी-जार" "--कुकी-जार" में बदलना होगा, है ना? – Sathish

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

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