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

我正在尝试使用 请求库来发送带有文章请求的 cookie,但是我不确定如何根据它的文档实际设置 cookie。该脚本供 Wikipedia 使用,需要发送的 cookie 如下所示:

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

然而,requests文档 Quick start 给出了唯一的例子:

cookies = dict(cookies_are='working')

如何使用这个库编码像上面这样的 cookie?我是否需要使用 python 的标准 cookie 库创建它,然后将它与 POST 请求一起发送?

368531 次浏览

请求的最新版本将从简单的字典为您构建 CookieJars。

import requests


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


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

享受:)

为了扩展前一个答案,如果你将两个请求链接在一起,并且想将从第一个请求返回的 cookie 发送到第二个请求(例如,跨请求维护会话) ,你可以这样做:

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

如果要将 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 user/password 传递给 python 脚本,并将 cookies 传递给浏览器,从而成功地在我的 python wsgi 脚本运行的同一域上使用 Bugzilla 和 TWiki 进行身份验证。这允许我在同一个浏览器中打开 Bugzilla 和 TWiki 页面并进行身份验证。我正在尝试用 SuiteCRM 做同样的事情,但是我在 SuiteCRM 接受从 python 脚本获得的会话 cookie 时遇到了麻烦,尽管它已经成功地进行了身份验证。