我正在尝试使用urllib2打开URL并将特定的cookie文本发送到服务器.例如,我想打开网站解决国际象棋问题,使用特定的cookie,例如search = 1.我该怎么做?
我正在尝试执行以下操作:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
Run Code Online (Sandbox Code Playgroud)
提前致谢
Mes*_*ssa 110
Cookie只是另一个HTTP标头.
import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")
Run Code Online (Sandbox Code Playgroud)
有关如何将HTTP标头添加到请求的其他方法,请参阅urllib2示例.
有多种方法可以处理cookie.像cookielib这样的模块尝试表现得像网络浏览器 - 记住你之前获得的cookie,并在以下请求中自动发送它们.
Mor*_*sen 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()
Run Code Online (Sandbox Code Playgroud)
编辑:
在Piotr的评论之后我会详细说明一下.来自文档:
CookieJar类存储HTTP cookie.它从HTTP请求中提取cookie,并在HTTP响应中返回它们.必要时,CookieJar实例会自动使包含的Cookie失效.子类还负责从文件或数据库中存储和检索cookie.
因此,无论您对CookieJar实例提出什么要求,所有Cookie都将自动处理.有点像你的浏览器:)
我只能根据自己的经验说话,我99%的用例用于获取cookie,然后需要在该会话中发送所有后续请求.上面的代码只是处理它,它是透明的.
Pio*_*ost 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"}}'
Run Code Online (Sandbox Code Playgroud)