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

Ric*_*ano 80 python cookies http-request python-requests

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

enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly
Run Code Online (Sandbox Code Playgroud)

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

cookies = dict(cookies_are='working')
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*itz 179

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

import requests

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

r = requests.post('http://wikipedia.org', cookies=cookies)
Run Code Online (Sandbox Code Playgroud)

请享用 :)

  • @ChrisNielsen:这个问题和答案中的代码是关于在Python请求中设置cookie的。该请求执行与浏览器请求类似的操作,但不涉及浏览器。 (9认同)
  • @ChrisNielsen这个问题/答案与浏览器无关 (7认同)
  • @ChrisNielsen:cookie是基本http协议的一个方面,浏览器最常使用:https://datatracker.ietf.org/doc/html/rfc6265 (2认同)

oar*_*alo 97

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

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

  • 另外,你可以使用`requests.session`来实现这个目的,在多个会话中存储cookie,而不是从返回的`session`对象进行调用. (45认同)
  • 即使在有时使用会话时我也必须使用它.在某些情况下,Sessions似乎错过了Set-Cookie标头. (7认同)
  • @TankorSmash肯定存在一个错误,我的cookie不是使用`request.session`继续进行的 (3认同)
  • @kervin 这也发生在我身上。看起来像是请求中的错误,因为会话“应该”处理该问题。 (2认同)