如何使用 Python Requests 库在 post 请求中发送 cookie?
- 2025-02-28 08:22:00
- admin 原创
- 62
问题描述:
我正在尝试使用Requests库通过 post 请求发送 cookie,但我不知道如何根据其文档实际设置 cookie。该脚本用于 Wikipedia,需要发送的 cookie 具有以下形式:
enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly
但是,requests
文档快速入门仅给出了以下示例:
cookies = dict(cookies_are='working')
如何使用此库对上述 cookie 进行编码?我是否需要使用 python 的标准 cookie 库来制作它,然后将其与 POST 请求一起发送?
解决方案 1:
Requests 的最新版本将根据简单的字典为您构建 CookieJars。
import requests
cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
r = requests.post('http://wikipedia.org', cookies=cookies)
享受 :)
解决方案 2:
只是为了扩展上一个答案,如果你将两个请求链接在一起,并希望将第一个请求返回的 cookie 发送到第二个请求(例如,在请求之间维持会话),你可以执行以下操作:
import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)
解决方案 3:
如果要将 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 脚本并将 cookie 传递给浏览器,我成功地与托管在同一个域上的 Bugzilla 和 TWiki 进行了身份验证。这样,我就可以在同一浏览器中打开 Bugzilla 和 TWiki 页面并进行身份验证。我试图对 SuiteCRM 执行同样的操作,但 SuiteCRM 无法接受从 python 脚本获得的会话 cookie,即使它已成功通过身份验证。
解决方案 4:
发送带有 cookie 的请求的最佳实践是使用Session
对象。这样您就不需要每次发送请求时都解析 cookie。
举个例子:
import requests
cookie = dict(user_session="xxx-xxx-xxx")
with requests.Session() as s:
s.cookies.update(cookie)
response = s.post("https:xxx.com")
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD