如何在Python中的HTTP头中设置和检索cookie?

Dam*_*ran 11 python cookies http-headers

我需要从服务器发送的HTTP响应中获取cookie并将其放入下一个请求的标头中.我该怎么做?

提前致谢.

sam*_*ias 25

您应该将cookielib模块与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')
Run Code Online (Sandbox Code Playgroud)

请注意,请求之间的值NIDPREF是相同的.如果省略,则HTTPCookieProcessor这些将是不同的(urllib2不会Cookie在第二个请求上发送标头).

  • build_opener()将为您添加HTTPHandler.如果Python安装具有SSL支持,它还将添加HTTPSHandler.https://docs.python.org/2/library/urllib2.html#urllib2.build_opener (2认同)

utd*_*mir 12

看看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.....'
Run Code Online (Sandbox Code Playgroud)

而对于发送,只需发送带有请求的Cookie标头.像那样:

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

编辑:

"http.cookie"(Python 2的"Cookie")可能更适合您:

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