如何在Python Requests库中在POST请求中发送Cookie?
我正在尝试使用Requests库发送带有cookie的POST请求,但我不太确定如何根据文档来设置这些cookie。这个脚本是用在维基百科上的,需要发送的cookie格式是这样的:
enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly
不过,requests
文档中的快速入门只给出了这个例子:
cookies = dict(cookies_are='working')
我该如何使用这个库来编码像上面那样的cookie呢?我需要先用Python的标准cookie库创建它,然后再和POST请求一起发送吗?
4 个回答
1
如果你想把cookie传给浏览器,就得把它加到要发送回去的头信息里。如果你在用wsgi的话:
import requests
...
def application(environ, start_response):
cookie = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
response_headers = [('Content-type', 'text/plain')]
response_headers.append(('Set-Cookie',cookie))
...
return [bytes(post_env),response_headers]
我成功地在同一个域名下用我的python wsgi脚本和Bugzilla、TWiki进行身份验证。我把用户和密码传给我的python脚本,然后把cookie传给浏览器。这样我就可以在同一个浏览器里打开Bugzilla和TWiki的页面,并且保持登录状态。我现在想用SuiteCRM做同样的事情,但遇到了问题,虽然我已经成功登录,但SuiteCRM却不接受从python脚本获得的会话cookie。
160
为了更好地理解之前的回答,如果你想把两个请求连接起来,并且想把第一个请求返回的 cookies 发送到第二个请求(比如说,保持会话在多个请求之间有效),你可以这样做:
import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)
359
最新版本的Requests库可以根据简单的字典自动为你创建CookieJar。
import requests
cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
r = requests.post('http://wikipedia.org', cookies=cookies)
希望你喜欢这个功能 :)