Обновление файлов cookie в сеансе с помощью модуля python-requests
Я использую модуль python-requests для обработки запросов и ответов oAuth.
Я хочу установить received access_token (содержимое ответа как dict) в requests.session.cookies
Объект.
Как я могу обновить существующие файлы cookie сеанса с полученным ответом от сервера?
[EDIT]
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 ответа:
Этот код работал на меня. надеюсь, что это может помочь кому-то другому.
Я хочу обновить сеанс.переменная 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)
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.
Для того, чтобы предоставить файл cookie самому модулю запросов, вы можете использовать параметр cookies для одного запроса и дать ему файл cookie jar или dict like объект, содержащий файл 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')