Wget के साथ लॉगिन पेज कैसे पाएं?


263

मैं पेज को डाउनलोड करने के लिए Wget का उपयोग करने का प्रयास कर रहा हूं , लेकिन मैं लॉगिन स्क्रीन को पा नहीं सकता।

मैं लॉगिन पृष्ठ पर पोस्ट डेटा का उपयोग करके उपयोगकर्ता नाम / पासवर्ड कैसे भेजूं और फिर एक प्रामाणिक उपयोगकर्ता के रूप में वास्तविक पृष्ठ डाउनलोड करूं?


जवाबों:


341

मैनुअल पेज के आधार पर:

# Log in to the server.  This only needs to be done once.
wget --save-cookies cookies.txt \
     --keep-session-cookies \
     --post-data 'user=foo&password=bar' \
     --delete-after \
     http://server.com/auth.php

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

सुनिश्चित करें कि --post-dataपैरामीटर ठीक से प्रतिशत-एन्कोडेड है (विशेषकर ampersands!) या अनुरोध संभवतः विफल हो जाएगा। यह भी सुनिश्चित करें कि userऔर passwordसही चाबियाँ हैं; आप लॉगिन पृष्ठ के HTML को खोजकर अपने कुंजी को देख सकते हैं (अपने ब्राउज़र के "तत्व का निरीक्षण करें" विशेषता देखें और nameउपयोगकर्ता नाम और पासवर्ड फ़ील्ड पर विशेषता ढूंढें )।


10
पहला कमांड, या दूसरा - प्रशासन सत्र-कुकीज़ जोड़ें?
फेलिप अल्वारेज़ 2

4
इसके लिए आपको -p( --page-requisites) की आवश्यकता नहीं है ।
ændrük

14
यह --delete-afterपहली रिट्रीवल में जोड़ने के लायक भी है, ताकि आप परिणाम पृष्ठ को लॉग इन करने से न बचा सकें।
जिम हन्ज़िकर

2
मुझे त्रुटि हो रही है WGET64: missing URLमैंने पूरी लाइन कमांड को एक लाइन में डाल दिया है और `\ _
मोगली

6
-की-सत्र-कुकी केवल पहले आदेश के लिए आवश्यक है। यह कुकीज़ को फ़ाइल में सहेजते समय सत्र कुकीज़ को शामिल करने का पहला आदेश बताता है। दूसरी कमांड बस प्रदान की गई फ़ाइल से सभी कुकीज़ को पढ़ती है।
वाडिम

63

यदि आपको एक समय के उपयोग के लिए इसकी आवश्यकता है, तो आप ब्राउज़र के माध्यम से लॉग इन कर सकते हैं और बाद में आवश्यक हेडर कॉपी कर सकते हैं:

स्क्रीनशॉट डेवलपर उपकरण का नेटवर्क टैग के उपयोग "cURL के रूप में कॉपी" (खोलने के बाद पृष्ठ पुनः लोड) और कर्ल के हेडर ध्वज की जगह -Hऔर --datawget के साथ --headerऔर --post-data


1
महान समाधान!
मंटिथ

बहुत बढ़िया! इसके अलावा मुझे wget के बजाय कर्ल का उपयोग करने का विकल्प बताया, क्योंकि यह एक ही काम कर सकता है और मुझे मापदंडों को बदलने की भी आवश्यकता नहीं है।
जन

बहुत साफ और सरल समाधान, +1!
कार्सिमिर पेंडिक

इसने मेरे लिए काम किया, जबकि wgetसही कुकी के साथ नहीं; मुझे कई अलग-अलग GET हेडर के लिए वेब सेवा की जांच पर संदेह है, यहां तक ​​कि "उपयोगकर्ता-एजेंट" या "कैश-कंट्रोल" जैसे महत्वहीन लोग भी।
आर्थर

@ मेरे लिए यह समाधान केवल एक ही काम था। मैंने URL से यथासंभव शीर्ष लेख डेटा निकालने की कोशिश की और अनिवार्य रूप से कुकी डेटा के साथ समाप्त हो गया। इसलिए मुझे संदेह है wgetकि डेटा को गलत तरीके से आपूर्ति की गई।
फ्लोरियन ब्ल्यू

62

मैंने सीधे मौजूदा कनेक्शन के कुकीज़ को --no- कुकीज़ और कुकी HTTP अनुरोध हेडर के साथ छूटने के लिए दिया। मेरे मामले में यह एक मडल विश्वविद्यालय लॉगिन था जहां लॉगिंग अधिक जटिल दिखती है (लॉगिन टिकट के साथ कई अनुरोधों का उपयोग करके)। मैंने पोस्ट-डेटा जोड़ा क्योंकि यह एक POST अनुरोध था। उदाहरण के लिए, सभी Moodle उपयोगकर्ताओं की सूची प्राप्त करें:

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php


7
बहुत बढ़िया टिप। यह तब उपयोगी होता है जब आप कुकी को अपनी मशीन से एक्सेस कर सकते हैं और फिर कमांड लाइन से किसी अन्य हेडलेस मशीन का उपयोग कर सकते हैं। :)
Tuxdude

3
आप एक ही समय में कई कुकीज़ भी सेट कर सकते हैं, --header "कुकी: access_token = IKVYJ; XSRF-TOKEN = 5e10521d"
फिल C

29

मुझे भी यही समस्या थी। मेरा समाधान Chrome के माध्यम से लॉगिन करना और कुकीज़ डेटा को टेक्स्ट फ़ाइल में सहेजना था। यह इस क्रोम एक्सटेंशन के साथ आसानी से हो जाता है: क्रोम कुकी.टेक्स्ट एक्सपोर्ट एक्सटेंशन

जब आपको कुकीज़ का डेटा मिलता है, तो एक उदाहरण यह भी है कि उन्हें कैसे उपयोग किया जाए। आपको एक सरल कॉपी-पेस्ट कमांड लाइन प्रदान की जाती है।


1
दुर्भाग्य से स्वचालित स्क्रिप्टिंग में लागू नहीं है
ज़्नकी

1
प्रश्न स्वचालित स्क्रिप्टिंग को निर्दिष्ट नहीं करता है। यह समाधान 99% काम को स्वचालित करने की अनुमति देता है।
विल शेपर्ड

1
दुर्भाग्य से, Google को इस ट्रिक के लिए बहुत स्मार्ट होना चाहिए। मुझे अभी भी एक लॉगिन पृष्ठ मिलता है।
जोशिया योडर

1
बेशक, Google गुप्त reCAPTCHAs का उपयोग करता है ... जैसा कि मैंने कई स्थानों पर देखा है, मानक प्रोग्रामेटिक एपीआई का उपयोग करना इस मामले में सबसे व्यावहारिक विकल्प है।
योशिय्याह योडर

10

मुझे एक-लाइनर चाहिए था जो किसी भी फाइल को डाउनलोड नहीं करता था; अगले अनुरोध में कुकी आउटपुट को पाइप करने का एक उदाहरण है। मैंने केवल Gentoo पर निम्नलिखित का परीक्षण किया, लेकिन इसे अधिकांश * निक्स वातावरण में काम करना चाहिए:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (यह एक पंक्ति है, हालांकि यह संभवतः आपके ब्राउज़र पर लपेटता है)

यदि आप आउटपुट को फ़ाइल में सहेजना चाहते हैं, तो बदल -O -दें-O /some/file/name


9

POSTed प्रपत्र डेटा करने के लिए आपको cURL की आवश्यकता नहीं है। --post-data 'key1=value1&key2=value2'ठीक काम करता है। नोट: आप फ़ाइल में POST डेटा के साथ छूटने के लिए एक फ़ाइल नाम भी पास कर सकते हैं।


8

यदि वे मूल प्रमाणीकरण का उपयोग कर रहे हैं:

wget http://username:password@www.domain.com/page.html

यदि वे POSTed फ़ॉर्म डेटा का उपयोग कर रहे हैं, तो आपको इसके बजाय cURL जैसी किसी चीज़ का उपयोग करना होगा।


मैं सर्वर पर कुछ भी बदलने के लिए उपयोग नहीं है, यह केवल पढ़ा है
Señor Reginold Francis

7
इसलिए? इसके लिए आपको सर्वर पर कुछ भी बदलने की आवश्यकता नहीं है।
ceejayoz

5

एक समाधान जो लिंच और विग का उपयोग करता है।

नोट: काम करने के लिए लिंक्स को --enable-persistent-कुकी फ़्लैग के साथ संकलित किया गया है

जब आप किसी साइट से कुछ फ़ाइल डाउनलोड करने के लिए wget का उपयोग करना चाहते हैं जिसके लिए लॉगिन की आवश्यकता होती है, तो आपको बस कुकी फ़ाइल की आवश्यकता होती है। कुकी फ़ाइल बनाने के लिए, मैं lynx को चुनता हूं। lynx एक टेक्स्ट वेब ब्राउज़र है। कुकी को बचाने के लिए सबसे पहले आपको lynx के लिए एक कॉन्फ़िगर फ़ाइल की आवश्यकता है। एक फ़ाइल बनाएं lynx.cfg। इन कॉन्फ़िगरेशन को फ़ाइल में लिखें।

SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file

फिर इस कमांड के साथ lynx शुरू करें:

lynx -cfg=lynx.cfg http://the.site.com/login

आपके द्वारा उपयोगकर्ता नाम और पासवर्ड डालने के बाद, और 'मुझे इस पीसी पर संरक्षित करें' या कुछ इसी तरह का चयन करें। यदि सफलतापूर्वक लॉगिन होता है, तो आपको साइट का एक सुंदर टेक्स्ट वेब पेज दिखाई देगा। और आप लॉगआउट करें। वर्तमान निर्देशिका में, आपको कुकी नाम की कुकी फ़ाइल मिलेगी। यह वही है जो हमें wget के लिए चाहिए।

फिर wget इस कमांड से साइट से फाइल डाउनलोड कर सकता है।

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz

2
अगर लॉगिन को जावास्क्रिप्ट की आवश्यकता है तो क्या होगा? lynx जावास्क्रिप्ट का समर्थन नहीं करता है।
तिबरियू

1

सर्वर पर wget के साथ डाउनलोड करने के लिए उदाहरण एक बड़ी फ़ाइल लिंक जो आपके ब्राउज़र में प्राप्त की जा सकती है।

उदाहरण में Google Chrome का उपयोग करना।

आपको जहां जरूरत है वहां लॉगइन करें और डाउनलोड को दबाएं। अपने लिंक को डाउनलोड करने और कॉपी करने के लिए जाएं।

यहां छवि विवरण दर्ज करें

फिर DevTools को एक पेज पर खोलें जहाँ आप लॉगिन करते हैं, कंसोल पर जाएँ और प्रवेश करके अपनी कुकीज़ प्राप्त करेंdocument.cookie

यहां छवि विवरण दर्ज करें

अब, सर्वर पर जाएं और अपनी फ़ाइल डाउनलोड करें: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

यहां छवि विवरण दर्ज करें


यह उत्तर Google को अच्छी तरह से नहीं लगता है - जहाँ कुकीज़ के दो पृष्ठ हैं!
योशिय्याह योडर

बेशक, Google गुप्त reCAPTCHAs का उपयोग करता है ... जैसा कि मैंने कई स्थानों पर देखा है, मानक प्रोग्रामेटिक एपीआई का उपयोग करना इस मामले में सबसे व्यावहारिक विकल्प है।
योशिय्याह योडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.