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

2024-04-19 11:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Requests库发送带有post请求的cookies,但我不确定如何根据其文档实际设置cookies。该脚本用于Wikipedia,需要发送的cookie格式如下:

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

但是,requests文档快速启动提供了以下示例:

cookies = dict(cookies_are='working')

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


Tags: path文档脚本comcookiesessiondomain格式
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]

通过将auth user/password传递给python脚本并将cookies传递给浏览器,我可以成功地使用托管在python wsgi脚本运行的同一域上的Bugzilla和TWiki进行身份验证。这允许我在同一个浏览器中打开Bugzilla和TWiki页面并进行身份验证。我试图对suiterm执行同样的操作,但是suiterm无法接受从python脚本获得的会话cookie,即使它已经成功地进行了身份验证。

为了扩展前面的回答,如果您将两个请求链接在一起,并希望将第一个请求返回的cookie发送到第二个请求(例如,在请求之间保持会话活动),则可以执行以下操作:

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

最新发布的请求将从简单的字典中为您构建Cookiejar。

import requests

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

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

享受:)

相关问题 更多 >