Python Flask 如何在请求头传递生成的Token?解决带Token调用prospect接口的问题
现有代码的核心问题
- 把
requests返回的完整HTTP响应对象直接当作Token值使用:代码里token1 = requests.request("POST", url, ...)拿到的是整个响应实例,不是接口返回的Token字符串,把这个实例塞到请求头里完全无法被服务端解析 - 未遵循接口鉴权的头部格式规范:绝大多数接口要求Authorization头的格式为
Bearer <有效Token字符串>,直接把未格式化的内容传入会被判定为非法请求 - 手动拼接带转义的JSON payload的写法容易引入隐形格式错误(比如原代码payload末尾附带的
\r\n),会增加接口解析失败的概率
修正后可直接运行的代码
import requests # 1. 发起登录请求 login_url = "http://website/login" # 直接用字典传登录凭证,由requests自动完成JSON序列化,不需要手动转义 login_payload = { "username": "abc@test.com", "password": "password" } login_headers = { 'Content-Type': 'application/json' } login_response = requests.post(login_url, headers=login_headers, json=login_payload) # 从登录响应中提取真实Token值 # 先打印响应结构确认Token所在字段,常见字段名:token、access_token,部分接口会嵌套在data字段下 login_response.raise_for_status() # 校验登录请求是否成功,失败直接抛错 actual_token = login_response.json().get("token") # 替换为你接口实际返回的Token字段路径 # 2. 携带Token调用prospect接口 prospect_url = "http://website/prospect" prospect_headers = { 'Content-Type': 'application/json', # 按通用鉴权规范拼接Token,若接口不需要Bearer前缀可直接传actual_token 'Authorization': f'Bearer {actual_token}' } prospect_response = requests.get(prospect_url, headers=prospect_headers) print(prospect_response.text)
实操排查注意事项
- 拿到登录响应后先打印完整的返回JSON,确认Token的实际存储位置,避免取错字段导致传入空值
- 提取Token后可先打印字符串内容,确认没有多余的换行、引号等隐形字符,再拼接到请求头中
- 若调用prospect接口仍返回401/403错误,可对照接口文档确认Authorization头的要求,部分接口会要求把Token放在自定义请求头(比如
X-Auth-Token)而非通用的Authorization头中
内容的提问来源于stack exchange,提问作者ImranShaik
相关产品推荐
相关产品推荐

