2011-04-09 136 views

回答

25

您應該使用cookielib module與urllib。

它會在請求之間存儲cookie,您可以將它們加載/保存到磁盤上。下面是一個例子:

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') 

注意,對於NIDPREF的值是請求之間的相同。如果您省略了HTTPCookieProcessor,這些將會不同(urllib2不會在第二次請求時發送Cookie標頭)。

+2

build_opener()將爲您添加HTTPHandler。如果Python安裝具有SSL支持,它還將添加HTTPSHandler。 https://docs.python.org/2/library/urllib2.html#urllib2.build_opener – 2014-10-27 03:53:37

11

看的urllib模塊:

(與Python 3.1,在Python 2時,使用urllib2.urlopen代替) 對於檢索的Cookie:

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

以及用於發送,只需發送一個Cookie頭部與請求。這樣的:

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

編輯:

的 「http.cookie」( 「曲奇」 的Python 2)可爲您更好地工作:

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

+0

我沒有得到點「與請求發送一個Set-Cookie頭」。可你肖我一些例??? – Damodaran 2011-04-09 18:02:03

+1

Damodaran編輯答案:) – utdemir 2011-04-09 20:05:03

+0

我不確定關於Python 2,但在3上,您可以將最後一行縮短爲'd.info()['Set-Cookie']'。 – freshtop 2014-06-19 01:06:49

3

您可以在Python 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) 
相關問題