【发布时间】:2019-03-12 22:39:49
【问题描述】:
我有一个应用程序,我可以像这样创建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。
在我的flask应用程序中,我想在几个函数中使用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,以便它在我的应用程序的所有功能中都可用,但在用户之间可能会有所不同?
【问题讨论】:
-
cookies 不在会话中。他们在请求中。导致您误入歧途的原因可能是,有时,cookie 用于存储会话 id,然后用于检索会话数据(从内存或数据库或任何地方)
-
@zvone:好的,那么我将在
session中从r.cookies中存储什么,然后如何根据我存储的内容在下一个request中创建cookies=cookies部分在session? -
玩 Session 对象要容易得多。 Cookie 管理是透明的。见docs.python-requests.org/en/master/user/advanced/…
-
@glenfant:感谢您的链接。我将如何在所描述的上下文中使用它?
-
@Cleb :
from requests import Session...client = Session()...r = client.post(db_url, data=json.dumps(d), headers=headers)。然后稍后继续使用这个client对象,它将为您处理 cookie。在 iPython REPL 中测试它以获得更多提示。
标签: python flask request session-cookies