5

我正在使用python-requests模块来处理 oAuth 请求和响应。我想在对象中设置接收到的access_token(响应内容为dictrequests.session.cookies

如何使用从服务器收到的响应更新现有的会话 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

4

3 回答 3

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 将重新使用和更新服务器发送回客户端的 cookie 的后续请求。


要将您自己的 Cookie 添加到单个请求中,您只需通过 cookies 参数添加它。

>>> s.get('https://www.google.com', cookies = {'cookieKey':'cookieValue'})

除非服务器为提供的 cookie 发回一个新值,否则会话将不会保留提供的 cookie。

于 2012-12-20T12:03:40.123 回答
1

这段代码对我有用。希望它可以帮助别人。

我想用从发布请求接收到的响应值更新 session.cookies 变量。因此,可以在另一个 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)
于 2012-12-21T12:33:57.047 回答
1

为了自己向requests模块提供 cookie,您可以将 cookie 参数用于单个请求,并给它一个 cookie jar 或包含 cookie 的类似对象的对象。

>>> import requests
>>> requests.get('https://www.example.com', cookies {'cookieKey':'cookieValue'})

但是,如果您想保留提供的 cookie而不必每次都设置 cookie 参数,您可以使用请求会话,您也可以将其传递给其他函数,以便它们可以使用和更新相同的 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')
于 2018-06-11T18:06:14.403 回答