在调用 Flask 接口时,明明已经登录并拿到了凭证,但请求 /books 时仍然被拒,返回:
{"message": "Please login first"}
如果你确定凭证有效,那问题 99% 出在 Cookie 请求头的写法 上。
❌ 错误写法:当成普通自定义 Header
很多人会这样写:
GET /books
Host: 127.0.0.1:5000
cookie: 5671
这其实是添加了一个键名叫 cookie 的普通 HTTP 头 ,而不是标准的 Cookie。
Flask 后端通过 request.cookies.get('cookie') 读取时,根本找不到,所以返回 "Please login first"。
✅ 正确写法:使用标准的 Cookie 字段
正确的 Cookie 头必须严格遵循 HTTP 协议格式:
GET /books
Host: 127.0.0.1:5000
Cookie: cookie=5671
注意三个要点:
-
键名是
Cookie(首字母大写),而不是小写的cookie。 -
值的格式是
key=value,等号左边是后端定义的键名,右边是登录获取的值。 -
多个 Cookie 可用分号分隔,如
Cookie: key1=val1; key2=val2。
📌 在 Postman / curl 中如何设置
Postman
在 Headers 标签页中,Key 填 Cookie,Value 填 cookie=你的登录凭证,例如 cookie=8848。
bash
curl -X GET http://127.0.0.1:5000/books -H "Cookie: cookie=8848"
总结
| 写法 | Header 类型 | Flask 能否读取 |
|---|---|---|
cookie: 5671 |
自定义 Header | ❌ 不能(request.cookies 忽略自定义头) |
Cookie: cookie=5671 |
标准 Cookie 头 | ✅ 能正常读取 |