Как хранить куки, полученные из запроса? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть приложение, в котором я создаю request, например:

headers = {'Content-Type': 'application/json;charset=ISO-8859-1'}
d = {'db_name': 'a_database', 'username': 'me', 'password': 'apw'}

db_url = "http://123.45.67.89:1234/something/rest/connections"
r = requests.post(db_url, data=json.dumps(d), headers=headers)

. После этого будет создано печенье:

r.cookies
<RequestsCookieJar[Cookie(version=0, name='removed', value='removed', port=None, port_specified=False, domain='123.45.67.89', domain_specified=False, domain_initial_dot=False, path='/something', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False), Cookie(version=0, name='connectname', value='alsoremoved', port=None, port_specified=False, domain='123.45.67.89', domain_specified=False, domain_initial_dot=False, path='/something/rest', path_specified=False, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>

. Затем я могу использовать r.cookies длядобавьте requests, где я затем укажу cookies=r.cookies.

В моем приложении для колб я хотел бы использовать cookie в нескольких функциях, поэтому я решил сохранить его в session:

from flask import Flask, render_template, request, jsonify, session

session['cookies'] = r.cookies

, чтобы впоследствии я мог использовать

r2 = requests.post(someurl, data=json.dumps(anotherd), headers=headers, cookies=session['cookies'])

Однако в результате

Объект типа 'RequestsCookieJar' не сериализуется в JSON

Как хранить r.cookies, чтобы он был доступен во всех функциях моего приложения, но мог различаться у разных пользователей?

1 Ответ

0 голосов
/ 08 октября 2018

Вы не можете сохранить RequestsCookieJar, нет, но если вам нужны только имена и значения файлов cookie, вы можете тривиально преобразовать банку в словарь:

session['cookies'] = r.cookies.get_dict()

The RequestsCookieJar.get_dict() метод также поддерживает фильтрацию по домену и пути.

Для будущих запросов параметр cookies вызовов requests.<METHOD>(...) принимает такой словарь напрямую.

...