python:urllib2如何使用urlopen请求发送cookie

python:urllib2如何使用urlopen请求发送cookie,python,urllib2,Python,Urllib2,我正在尝试使用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打开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/")
有关如何向请求中添加HTTP头的其他方法,请参阅

有更多的方法来处理cookies。一些模块,如,试图表现得像web浏览器-记住您以前得到的cookies,并在以下请求中自动再次发送它们。

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

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

因此,无论您使用
CookieJar
实例发出什么请求,所有cookie都将自动处理。有点像你的浏览器:)

我只能根据自己的经验发言,我99%的cookie用例是接收cookie,然后需要在该会话中随所有后续请求一起发送cookie。
上面的代码就是这样处理的,而且它是透明的。它使涉及HTTP的每项任务都比urllib2容易一些。从《快速入门指南》的第节:

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


这个答案不起作用,因为在Python3中,
urllib2
模块已被拆分为多个模块。 你需要做什么

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

在本教程中,他们是在从服务器收到cookie后保存cookie的,不是吗?他们都是在保存从服务器检索到的cookie并将其返回到服务器,因为cookie通常是这样工作的。如果你想做一些不寻常的事情,那么你就必须深入挖掘图书馆。我很确定它会支持你想做的任何事情。@Piotrdorogost你是对的,我不发送带有以下代码的特定cookie:)我假设我在发布时会收到一个cookie,从那时起,
CookieJar
实例将在所有相关域上为我处理它。OP明确说明(…)发送特定cookie文本(…)因此,这不是答案。它基于
urllib3
,支持urllib3等连接池,并持久化cookie、标头-请参阅。真漂亮!如果您有多个cookie,则需要将它们合并到一个标题值中,并用分号分隔。例如,如果您有一个名为
cookievals
的cookie值字典,那么请使用
opener.addheaders.append(('cookie',“;”)。join(“%s=%s%”(k,v)表示cookievals.items()中的k,v))
。如果他们使用其他参数来urlopen会怎么样?
from urllib import request
opener = request.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")