如何存储从请求中收到的Cookie?

时间:2018-10-08 09:28:32

标签: python flask request session-cookies

我有一个制作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)

这将创建一个cookie:

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 :(得分:1)

您不能存储RequestsCookieJar,否,但是,如果您只需要cookie的名称和值,则可以将jar转换为字典:

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

RequestsCookieJar.get_dict() method还支持按域和路径进行过滤。

对于将来的请求,cookies调用的requests.<METHOD>(...)参数直接接受此类字典。