我正在尝试使用urllib2打开url并将特定的cookie文本发送到服务器。例如,我想用特定的cookie打开网站解决象棋问题,例如search = 1。我该怎么做?
我正在尝试执行以下操作:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
提前致谢
我正在尝试使用urllib2打开url并将特定的cookie文本发送到服务器。例如,我想用特定的cookie打开网站解决象棋问题,例如search = 1。我该怎么做?
我正在尝试执行以下操作:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
提前致谢
Answers:
Cookie只是另一个HTTP标头。
import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")
有关如何将HTTP标头添加到您的请求的其他方式,请参见urllib2示例。
有更多方法来处理cookie。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()
编辑:
在皮约特发表评论之后,我将详细说明。从文档:
CookieJar类存储HTTP cookie。它从HTTP请求中提取cookie,并在HTTP响应中返回它们。CookieJar实例在必要时会自动使包含的cookie失效。子类还负责从文件或数据库中存储和检索Cookie。
因此,无论您对CookieJar
实例提出什么请求,所有cookie都会自动处理。就像您的浏览器一样:)
我只能以自己的经验谈谈,我99%的cookie用例是接收cookie,然后需要将该会话中所有后续请求发送给它。上面的代码可以处理这些事情,并且透明地进行。
CookieJar
此后实例将在所有相关域中为我处理该Cookie 。
cookievals
,请使用opener.addheaders.append(('Cookie', "; ".join('%s=%s' % (k,v) for k,v in cookievals.items())))
。