问题:如何使用Python Requests库在发布请求中发送Cookie?
我正在尝试使用Requests库发送带有后期请求的cookie,但是我不确定如何根据其文档实际设置cookie。该脚本可在Wikipedia上使用,并且需要发送的cookie具有以下形式:
enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly
但是,requests
文档快速入门仅以此为例:
cookies = dict(cookies_are='working')
如何使用该库对上述Cookie进行编码?我是否需要使用python的标准cookie库进行制作,然后将其与POST请求一起发送?
回答 0
最新版本的“请求”将通过简单的词典为您构建CookieJars。
import requests
cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
r = requests.post('http://wikipedia.org', cookies=cookies)
请享用 :)
回答 1
只是为了扩展上一个答案,如果将两个请求链接在一起,并且想要将第一个返回的cookie发送到第二个(例如,保持跨请求的会话有效),则可以执行以下操作:
import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)
回答 2
如果要将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脚本并将cookie传递给浏览器,我能够成功地通过托管在同一域中的Bugzilla和TWiki进行身份验证,而python wsgi脚本正在运行。这使我可以在同一浏览器中打开Bugzilla和TWiki页面并进行身份验证。我正在尝试对SuiteCRM执行相同的操作,但是即使SuiteCRM已成功通过身份验证,我也无法接受从python脚本获得的会话cookie。