Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python请求模块更新会话中的Cookie_Python_Oauth 2.0_Session Cookies_Python Requests_Http Request - Fatal编程技术网

使用python请求模块更新会话中的Cookie

使用python请求模块更新会话中的Cookie,python,oauth-2.0,session-cookies,python-requests,http-request,Python,Oauth 2.0,Session Cookies,Python Requests,Http Request,我正在使用python请求模块来处理oAuth请求和响应。 我想在requests.session.cookies对象中设置接收到的访问令牌(响应内容为dict) 如何使用从服务器收到的响应更新会话的现有cookie [编辑] self.session = requests.session(auth=self.auth_params) resp = self.session.post(url, data=data, headers=self.headers) content = resp.con

我正在使用python请求模块来处理oAuth请求和响应。 我想在
requests.session.cookies
对象中设置接收到的访问令牌(响应内容为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\u from\u cookiejar(self.session.cookies)
返回带有一个会话密钥的dict。现在,我想在
self.session中更新收到的响应内容。Cookie

请求可以为您做到这一点,只要您告诉它您发出的所有
请求都是同一
会话的一部分:

>>> import requests
>>> s = requests.session()
>>> s.get('https://www.google.com')
<Response [200]>
>>> s.cookies
<<class 'requests.cookies.RequestsCookieJar'>[Cookie(version=0, name='NID'...

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

此代码对我有效。希望能对其他人有所帮助

我想用post请求中收到的响应值更新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)

为了自己向
请求
模块提供cookie,您可以对单个请求使用cookies参数,并为其提供包含cookie的cookie jar或类似dict的对象

但是如果您想保留提供的cookie而不必每次都设置cookies参数,您可以使用Requests会话,您还可以将该会话传递给其他职能部门,以便他们可以使用和更新相同的cookies:

>>> 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')

谢谢,这将如何工作后的要求。你能举个例子吗?我得到{'access_token':'Somecode'}作为响应,我想在现有会话对象的cookie中设置相同的dict。在得到回应之后。我如何才能做到这一点?@Yajushi您不需要,只要您使用
会话
对象,
请求
将在后续请求中自动重复使用cookies。对于
post
请求,请执行:
s.post(url,data={k:v})
但是,我想在session.cookies中设置响应内容(来自post请求)。请检查编辑。如果我误解了,请纠正我。谢谢你的快速回复。对我来说,它不是专门为post请求自动更新cookies。请检查我的答案,它对我有效。这听起来像是一个解决办法,即为什么请求不保存post呼叫的cookies?参见第5.1节中的示例。我会向你提出要求的
>>> import requests
>>> requests.get('https://www.example.com', cookies {'cookieKey':'cookieValue'})
>>> 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')