使用python-requests模块更新会话中的Cookie

时间:2012-12-20 11:54:31

标签: python oauth-2.0 session-cookies python-requests http-request

我正在使用 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中收到的回复内容。

3 个答案:

答案 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')
相关问题