I am having trouble getting the Flask test client to pass cookies. This code used to work and I presume something in my environment changed, which breaks this. I recently created a new Python 3.7 virtualenv and installed 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))
Running the example prints {}
, but I expect it to print {"abc":"123","def":"456"}
.
If I run my app via flask run
, sending headers with curl works:
$ curl -H "Cookie: abc=123; def=456" http://localhost:5000/cookie_echo
{"abc":"123","def":"456"}
The
Client
manages cookies, you should not pass them manually inheaders={}
. Due to changes in Werkzeug 0.15, passing aCookie
header manually, which was not intended, no longer works. Useclient.set_cookie
to set a cookie, or set the cookie in a response and it will be sent with the next request.