如何使用Python Requests库在post请求中发送cookie?

时间:2011-08-23 16:57:25

标签: python cookies http-request python-requests

我正在尝试使用Requests库发送带有帖子请求的Cookie,但我不确定如何根据其文档实际设置Cookie。该脚本用于维基百科,需要发送的cookie采用以下形式:

enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly

但是,requests文档快速入门将此作为唯一示例:

cookies = dict(cookies_are='working')

如何使用此库对上述cookie进行编码?我是否需要使用python的标准cookie库,然后将其与POST请求一起发送?

3 个答案:

答案 0 :(得分:153)

最新版本的Requests将通过简单的词典为您构建CookieJars。

import requests

cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}

r = requests.post('http://wikipedia.org', cookies=cookies)

享受:)

答案 1 :(得分:90)

只是为了扩展上一个答案,如果要将两个请求链接在一起并希望将从第一个请求返回的cookie发送到第二个请求(例如,在请求之间保持会话处于活动状态),您可以这样做:

import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)

答案 2 :(得分:0)

如果要将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]

通过将auth用户/密码传递给我的python脚本并将cookie传递给浏览器,我能够成功地通过托管在同一域中的Bugzilla和TWiki进行身份验证,从而运行python wsgi脚本。这使我可以在同一浏览器中打开Bugzilla和TWiki页面并进行身份验证。我正在尝试对SuiteCRM做同样的事情,但是即使SuiteCRM已成功通过身份验证,我也无法接受从python脚本获得的会话cookie。