使用Python发送POST请求返回400 Bad Request,请求排查问题
解决POST请求返回400 Bad Request的问题
先看看你的代码:
import requests r = requests.post("http://tupodomen.info/api/login", data={'username': '<login>', 'password': '<password>'}, headers={'content-type': 'application/x-www-form-urlencoded'}) print(r.status_code, r.reason) print('<<<<') k=input("press close to exit")
400错误通常表示你的请求不符合服务器的预期,我帮你梳理几个最可能的原因和解决办法:
占位符未替换成实际值:你代码里的
<login>和<password>是占位符对吧?如果直接发送这个字符串,服务器根本识别不了你的身份,肯定会返回400。先把这两个替换成你真实的用户名和密码试试。请求格式不匹配:虽然你手动设置了
application/x-www-form-urlencoded的Content-Type,但很多现代API更倾向于接收JSON格式的请求体。你可以换用json参数来发送数据,requests会自动帮你设置正确的Content-Type头,代码改成这样:r = requests.post("http://tupodomen.info/api/login", json={'username': '你的真实用户名', 'password': '你的真实密码'})API端点可能有误:确认一下
http://tupodomen.info/api/login是不是正确的登录接口路径。有时候官方文档可能更新了路径,或者你拼写错了(比如少个v1变成/api/v1/login),可以仔细核对一下。缺少必填参数:有些登录接口会要求额外的参数,比如验证码、设备标识或者csrf token。你可以打开浏览器的开发者工具(按F12),模拟一次正常登录,看看Network面板里发送的请求包含哪些参数,对比你的代码是不是漏了关键项。
服务器返回了具体错误提示:你可以在代码里加一行
print(r.text),看看服务器返回的具体内容。很多时候400错误会附带文字说明,比如“密码格式错误”或者“用户名不存在”,能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Atom Particle




