如何从urllib.request获取cookie?

时间:2014-08-08 18:41:32

标签: python cookies python-3.x urllib

如何从urllib.request获取Cookie?

import urllib.request
import urllib.parse

data = urllib.parse.urlencode({
    'user': 'user',
    'pass': 'pass'
})
data = data.encode('utf-8')

request = urllib.request.urlopen('http://example.com', data)
print(request.info())

request.info()会以非常有用的方式返回Cookie。

2 个答案:

答案 0 :(得分:3)

我认为现在使用requests包是一个更好的选择。请在访问时尝试使用此示例代码显示Google设置Cookie:

import requests

url = "http://www.google.com"
r = requests.get(url,timeout=5)
if r.status_code == 200:
    for cookie in r.cookies:
        print(cookie)            # Use "print cookie" if you use Python 2.

给出:

Cookie NID=67=n0l3ME1Jl3-wwlH7oE5pvxJ_CfU12hT5Kh65wh21bvE3hrKFAo1sJVj_UcuLCr76Ubi3yxENROaYNEitdgW4IttL43YZGlf8xAPl1IbzoLG31KP5U2tiP2y4DzVOJ2fA for .google.se/

Cookie PREF=ID=ce66d1288fc0d977:FF=0:TM=1407525509:LM=1407525509:S=LxQv7q8fju-iHJPZ for .google.se/

答案 1 :(得分:2)

response.info()dict类型的对象。这样您就可以解析所需的任何信息。这是一个用python3编写的演示:

from urllib import request
from urllib.error import HTTPError

# declare url, header_params 

req = request.Request(url, data=None, headers=header_params, method='GET')
try:
    response = request.urlopen(req)

    cookie = response.info().get_all('Set-Cookie')
    content_type = response.info()['Content-Type']
except HTTPError as err:
    print("err status: {0}".format(err))
    return

您现在可以解析cookie变量作为您的应用程序要求。