使用 Flask 测试客户端请求传递 cookie 标头

cla*_*lay 10 python flask

我无法让 Flask 测试客户端传递 cookie。这段代码曾经可以工作,我认为我的环境中的某些东西发生了变化,这打破了这一点。我最近创建了一个新的 Python 3.7 virtualenv 并安装了 Flask 1.0.2。

from flask import Flask, jsonify, request

app = Flask(__name__)


@app.route('/cookie_echo')
def cookie_echo():
    return jsonify(request.cookies)


with app.test_client() as client:
    response = client.get("/cookie_echo", headers={"Cookie": "abc=123; def=456"})
    print(response.get_data(as_text=True))
Run Code Online (Sandbox Code Playgroud)

运行示例打印{},但我希望它打印{"abc":"123","def":"456"}

如果我通过 运行我的应用程序flask run,使用 curl 发送标头工作:

$ curl -H "Cookie: abc=123; def=456" http://localhost:5000/cookie_echo
{"abc":"123","def":"456"}
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 16

Client管理饼干,你不应该手动将其传入headers={}。由于 Werkzeug 0.15 中的更改,Cookie手动传递标头不再有效。使用client.set_cookie设置cookie,或者设置在响应中的Cookie,它会在下一个请求被发送。

c = app.test_client()
c.set_cookie('localhost', 'abc', '123')
c.set_cookie('localhost', 'def', '456')
c.get('/cookie_echo')
Run Code Online (Sandbox Code Playgroud)