通过Flask测试客户端请求传递Cookie标头

时间:2019-04-24 20:45:16

标签: 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))

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

如果我通过flask run运行我的应用,则发送带有curl的标头即可:

$ curl -H "Cookie: abc=123; def=456" http://localhost:5000/cookie_echo
{"abc":"123","def":"456"}

1 个答案:

答案 0 :(得分:1)

Client管理cookie,您不应在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')