我正在使用 python-requests 模块来处理oAuth请求和响应。
我想在requests.session.cookies
对象中设置收到的 access_token (响应内容为 dict )。
如何使用服务器收到的响应更新会话的现有cookie?
[编辑]
self.session = requests.session(auth=self.auth_params)
resp = self.session.post(url, data=data, headers=self.headers)
content = resp.content
我想做类似的事情:
requests.utils.dict_from_cookiejar(self.session.cookies).update(content)
此处,requests.utils.dict_from_cookiejar(self.session.cookies)
使用一个会话密钥返回 dict 。现在,我想更新self.session.cookies
中收到的回复内容。
答案 0 :(得分:3)
requests
可以为您做到这一点,前提是您告诉所有requests
您所做的session
属于同一个>>> import requests
>>> s = requests.session()
>>> s.get('https://www.google.com')
<Response [200]>
>>> s.cookies
<<class 'requests.cookies.RequestsCookieJar'>[Cookie(version=0, name='NID'...
:
s.get
使用s.post
或>>> s.get('https://www.google.com', cookies = {'cookieKey':'cookieValue'})
发出的后续请求将重新使用并更新发送回客户端的服务器。
要将Cookie自行添加到单个请求,您只需通过cookies参数添加它。
{{1}}
除非服务器为提供的cookie发回新值,否则会话不会保留提供的Cookie。
答案 1 :(得分:1)
这段代码对我有用。希望它可以帮助别人。
我想更新session.cookies变量以及来自post请求的已接收响应值。 因此,相同的请求值可以用于另一个post / get请求。
这里,我做了什么:
1)更新请求模块到1.0.3版本。
2)创建了2个函数
session = requests.session()
def set_SC(cookie_val):
for k,v in cookie_dict.iteritems():
if not isinstance(v, str):
cookie_dict[k] = str(v)
requests.utils.add_dict_to_cookiejar(session.cookies,
cookie_val)
def get_SC():
return requests.utils.dict_from_cookiejar(session.cookies)
In another function:
setSC(response.content)
答案 2 :(得分:0)
为了自己向请求模块提供cookie,您可以将cookie参数用于单个请求,并为其提供一个cookie jar或dict,如包含cookie的对象。
>>> import requests
>>> requests.get('https://www.example.com', cookies {'cookieKey':'cookieValue'})
但如果你想保留提供的cookie 而不必每次都设置cookies参数,你可以使用reqests会话,你也可以传递给其他功能,以便他们可以使用和更新相同的的Cookie:
>>> session = requests.session()
>>> session.cookies.set('cookieKey', 'cookieName')
# In order to avoid cookie collisions
# and to only send cookies to the domain / path they belong to
# you have to provide these detail via additional parameters
>>> session.cookies.set('cookieKey', 'cookieName', path='/', domain='www.example.com')