时间:2010-07-26 12:36:38

标签: python urllib2

5 个答案:

答案 0 :(得分:110)

答案 1 :(得分:57)

也许使用cookielib.CookieJar可以帮到你。例如,当发布到包含表单的页面时:

import urllib2
import urllib
from cookielib import CookieJar

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# input-type values from the html form
formdata = { "username" : username, "password": password, "form-id" : "1234" }
data_encoded = urllib.urlencode(formdata)
response = opener.open("https://page.com/login.php", data_encoded)
content = response.read()

修改

在Piotr评论之后,我会详细说明一下。来自文档:

  

CookieJar类存储HTTP cookie。它从HTTP中提取cookie   请求,并在HTTP响应中返回它们。 CookieJar实例   必要时自动过期包含的cookie。子类是   还负责存储和检索文件中的cookie或   数据库中。

因此,无论您对CookieJar实例提出任何要求,所有Cookie都将自动处理。有点像你的浏览器:)

我只能根据自己的经验说话,而我99%的用例Cookie是接收cookie,然后需要在该会话中发送所有后续请求。 上面的代码只是处理它,而且它是透明的。

答案 2 :(得分:13)

您可能想看一下名为Requests的优秀HTTP Python库。它使涉及HTTP的每个任务比urllib2更容易。来自快速入门指南的Cookies部分:

  

要将您自己的cookie发送到服务器,您可以使用cookies参数:

>>> cookies = dict(cookies_are='working')

>>> r = requests.get('http://httpbin.org/cookies', cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'

答案 3 :(得分:5)

答案 4 :(得分:0)

此答案无效,因为urllib2模块已在Python 3中拆分为多个模块。 您需要

from urllib import request
opener = request.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")