HTTP接口返回 400 Bad Request 错误表示客户端发送的请求存在语法或参数问题,服务器无法理解或处理。以下是常见原因和解决方案:
常见原因
请求参数错误
- 缺少必填字段(如未传
user_id
但接口要求必填)。 - 参数类型不匹配(例如接口需要
int
但传了字符串"123"
)。 - 参数格式无效(如日期格式应为
YYYY-MM-DD
但传了MM/DD/YYYY
)。
- 缺少必填字段(如未传
请求体格式问题
- 未设置正确的
Content-Type
头部(如接口要求application/json
但实际是text/plain
)。 - JSON/XML数据格式错误(如缺少引号、括号不匹配)。
- 未设置正确的
URL或路径错误
- URL中包含非法字符(如未转义的空格、特殊符号)。
- 接口路径拼写错误(如将
/api/v1/user
写成/api/v1/userss
)。
头部(Headers)问题
- 缺少必要的认证头(如
Authorization: Bearer tokenxxx
)。 - 自定义头部不符合规范。
- 缺少必要的认证头(如
数据大小限制
- 上传的文件或数据超过服务器限制。
服务器校验失败
- 业务逻辑校验不通过(如订单ID不存在、用户无权限等)。
排查步骤
检查请求日志
对比请求数据和接口文档,确认参数名、类型、格式是否完全一致。验证工具辅助
使用Postman/cURL
或浏览器开发者工具(Network面板)查看原始请求内容,重点关注: “`http POST /api/login HTTP/1.1 Content-Type: application/json
{“username”: “test”, “password”: “123456”} # 示例JSON
3. **服务端日志**
如果是自有接口,检查服务端日志中的详细错误信息(可能提示具体哪个字段非法)。
4. **代码调试**
如果是客户端代码发送请求,打印完整的请求数据和响应:
```python
import requests
response = requests.post(url, json=data)
print(response.request.body) # 查看实际发送的数据
print(response.text) # 查看错误详情
解决方案
- ✅ 修正参数:确保所有必填字段、类型、格式符合接口文档要求。
- ✅ 设置正确的Content-Type:例如:
Content-Type: application/json; charset=utf-8
- ✅ URL编码:对URL中的特殊字符进行编码(如空格转为
%20
)。 - ✅联系API提供方:若文档不清晰,获取更详细的错误说明或示例。
示例场景
假设调用登录接口时报400:
// 错误请求(密码字段缺失)
{"username": "admin"}
// 正确请求
{"username": "admin", "password": "p@ssw0rd"}
通过逐步排查通常能快速定位问题。
内容由零声教学AI助手提供,问题来源于学员提问