2011-04-09 9 views
9

मुझे सर्वर द्वारा भेजी गई HTTP प्रतिक्रिया से कुकीज़ प्राप्त करने की आवश्यकता है और उसे अगले अनुरोध के शीर्षलेख में रखना होगा। मैं यह कैसे कर सकता हूं?पायथन में HTTP शीर्षलेख में कुकी को कैसे सेट और पुनर्प्राप्त करें?

अग्रिम धन्यवाद।

उत्तर

25

आप cookielib module का उपयोग करना चाहिए urllib के साथ।

यह अनुरोधों के बीच कुकीज़ संग्रहीत करेगा, और आप उन्हें डिस्क पर लोड/सहेज सकते हैं। यहाँ एक उदाहरण है:

import cookielib 
import urllib2 

cookies = cookielib.LWPCookieJar() 
handlers = [ 
    urllib2.HTTPHandler(), 
    urllib2.HTTPSHandler(), 
    urllib2.HTTPCookieProcessor(cookies) 
    ] 
opener = urllib2.build_opener(*handlers) 

def fetch(uri): 
    req = urllib2.Request(uri) 
    return opener.open(req) 

def dump(): 
    for cookie in cookies: 
     print cookie.name, cookie.value 

uri = 'http://www.google.com/' 
res = fetch(uri) 
dump() 

res = fetch(uri) 
dump() 

# save cookies to disk. you can load them with cookies.load() as well. 
cookies.save('mycookies.txt') 

सूचना है कि NID और PREF के लिए मूल्यों अनुरोधों के बीच एक ही हैं। यदि आपने HTTPCookieProcessor छोड़ा तो यह अलग होगा (urllib2 दूसरे अनुरोध पर Cookie शीर्षलेख नहीं भेजेगा)।

+2

build_opener() आपके लिए HTTPHandler जोड़ देगा। यदि पाइथन इंस्टॉलेशन में SSL समर्थन है तो यह HTTPSHandler भी जोड़ देगा। https://docs.python.org/2/library/urllib2.html#urllib2.build_opener –

11

urllib मॉड्यूल पर देखो:

(अजगर 3.1 के साथ, अजगर 2 में, urllib2.urlopen बजाय का उपयोग करें) पुन: प्राप्त करने के लिए कुकीज़ के लिए:

>>> import urllib.request 
>>> d = urllib.request.urlopen("http://www.google.co.uk") 
>>> d.getheader('Set-Cookie') 
'PREF=ID=a45c444aa509cd98:FF=0:TM=14.....' 

और भेजने के लिए, बस के साथ एक कुकी शीर्ष लेख भेजने निवेदन। कि जैसा:

r=urllib.request.Request("http://www.example.com/",headers={'Cookie':"session_id=1231245546"}) 
urllib.request.urlopen(r) 

संपादित करें:

"http.cookie" (अजगर 2 के लिए "कुकी") आपके लिए बेहतर काम कर सकते हैं:

http://docs.python.org/library/cookie.html

+0

मैं बिंदु नहीं मिल रहा है "अनुरोध के साथ एक सेट कुकी शीर्ष लेख भेजें" .can आप शॉ मुझे कुछ उदाहरण??? – Damodaran

+1

दमोदरन, संपादित उत्तर :) – utdemir

+0

मुझे पाइथन 2 के बारे में निश्चित नहीं है, लेकिन 3 पर आप अंतिम पंक्ति को 'd.info() [' सेट-कुकी ']' को छोटा कर सकते हैं। – freshtop

3

आप अजगर 2,7

url="http://google.com" 
request = urllib2.Request(url) 
sock=urllib2.urlopen(request) 
cookies=sock.info()['Set-Cookie'] 
content=sock.read() 
sock.close() 
print (cookies, content) 

में उपयोग कर सकते हैं और अनुरोध वापस भेजने

def sendResponse(cookies): 
import urllib 
request = urllib2.Request("http://google.com") 
request.add_header("Cookie", cookies) 
request.add_data(urllib.urlencode([('arg1','val1'),('arg1','val1')])) 
opener=urllib2 
opener=urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)) 
sock=opener.open(request) 
content=sock.read() 
sock.close() 
print len(content) 
संबंधित मुद्दे