पायथन का उपयोग एक वेबपेज पर लॉगिन करने और बाद में उपयोग के लिए कुकीज़ को पुनः प्राप्त करने के लिए कैसे करें?


146

मैं अजगर का उपयोग करके वेबपेज को डाउनलोड और पार्स करना चाहता हूं, लेकिन इसे एक्सेस करने के लिए मुझे कुछ कुकीज़ सेट की आवश्यकता है। इसलिए मुझे पहले वेबपेज पर https लॉगिन करना होगा। लॉगिन क्षण में दो POST Params (उपयोगकर्ता नाम, पासवर्ड) /login.php पर भेजना शामिल है। लॉगइन रिक्वेस्ट के दौरान मैं कुकीज़ को रिस्पॉन्स हेडर से रिकवर करना चाहता हूं और उन्हें स्टोर करना चाहता हूं ताकि मैं उन्हें वेबपेज /data.php डाउनलोड करने के लिए रिक्वेस्ट में इस्तेमाल कर सकूं।

मैं इसे अजगर (अधिमानतः 2.6) में कैसे करूंगा? यदि संभव हो तो मैं केवल बिलिन मॉड्यूल का उपयोग करना चाहता हूं।

जवाबों:


147
import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

resp.read()उस पृष्ठ का सीधा HTML है जिसे आप खोलना चाहते हैं, और आप openerअपने सत्र कुकी का उपयोग करके किसी भी पृष्ठ को देखने के लिए उपयोग कर सकते हैं ।


1
क्या यह सुरक्षित है? क्या यह पैकेट स्नीफ़र्स को प्लेनटेक्स्ट पासवर्ड देखने की अनुमति नहीं देगा? क्या Https का उपयोग करना अधिक सुरक्षित होगा?
हार्टिनपीस

2
@Heartinpiece हाँ, यदि सर्वर इसे प्रदान करता है तो आपको HTTPS का उपयोग करना चाहिए।
हार्ले होल्कोम्बे

धन्यवाद ... लेकिन कल्पना करें कि हमने लॉग इन किया और sth पोस्ट करना चाहते हैं ... पोस्ट डेटा के लिए इस थ्रेड में कोकी कैसे सेट करें?
MLSC

यदि आप बड़े कोड लिख रहे हैं तो अत्यधिक अनुरोध पुस्तकालय का उपयोग करने की सलाह दें। (व्यक्तिगत अनुभव)
स्वप्निल जरीवाला

157

यहाँ उत्कृष्ट अनुरोध पुस्तकालय का उपयोग कर एक संस्करण है :

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://example.com/login.php', data=payload)
    response = c.get('http://example.com/protected_page.php')
    print(response.headers)
    print(response.text)

3
क्या 'action': 'login'वास्तव में इस उदाहरण में आवश्यक है, या यह केवल एक अतिरिक्त पैरामीटर है जिसे अनुरोध के साथ भेजा गया है?
टेड

1
@ यह हिस्सा पूरी तरह से आवश्यक है।
संगुनुन ली

@ टेड शायद इस विशेष उदाहरण में आवश्यक है। मेरे कार्यक्रम में इसकी जरूरत नहीं थी।
हाईस्टेकर

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