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