python:urllib2如何用urlopen请求发送cookie
我正在尝试使用urllib2来打开url并发送特定的cookie文本到服务器。 例如,我想打开网站解决国际象棋的问题 ,与一个特定的cookie,例如search= 1。 我该怎么做?
我正在尝试执行以下操作:
import urllib2 (need to add cookie to the request somehow) urllib2.urlopen("http://chess-problems.prg")
提前致谢
Cookie只是另一个HTTP标头。
import urllib2 opener = urllib2.build_opener() opener.addheaders.append(('Cookie', 'cookiename=cookievalue')) f = opener.open("http://example.com/")
有关其他方法,请参阅urllib2示例 ,了解如何将HTTP头添加到您的请求中。
如何处理cookies还有更多的方法。 像cookielib这样的一些模块试图像Web浏览器一样行事 – 记住之前获得的cookie,并在以下请求中自动发送它们。
也许使用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%使用cookies的方法是收到一个cookie,然后在随后的所有请求中发送它。 上面的代码就是这样处理的,而且是透明的。
您可能需要查看名为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"}}'
使用cookielib 。 链接的文档页面在最后提供了示例。 你也可以在这里find一个教程。