You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用urlencode传递凭证时Python requests.post报400错误求助

解决requests.post登录时400 Bad Request问题

问题场景

使用urlencode处理登录凭证后,调用requests.post始终返回400 Bad Request,错误信息如下:

File "/usr/local/lib/python3.6/site-packages/requests/models.py", line 960, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url:"urlname"/auth/login?username=user&password=password

用户代码:

loginin["password"] = PASSWORD
loginin = {"username": USER, "password":PASSWORD}
logindata = urllib.parse.urlencode(loginin, safe='[_/+$')
print(type(logindata), logindata)
if debug:
    print(logindata)
headers = {'content-type': 'application/json'}
rlogin = requests.post(urllogin, params=logindata, headers=headers, verify=False)
rlogin.raise_for_status()
print("status_code:", rlogin.status_code)
if rlogin.status_code == 200:
    resplogin = json.loads(rlogin.text)
    print("resplogin",resplogin)

错误原因拆解

  1. 请求数据位置错误:params参数用于拼接URL查询参数,POST请求的登录凭证应放在请求体中,而非URL上,这会导致接口无法正确识别请求数据格式。
  2. 头部与数据格式冲突:设置了content-type: application/json头部,但实际传递的是urlencode处理后的表单格式数据,格式不匹配引发400错误。
  3. 冗余代码:loginin["password"] = PASSWORD无意义,下一行直接重新定义了loginin字典,覆盖了之前的操作。
  4. 不必要的urlencode:requests库会自动处理表单或JSON数据的编码,无需手动调用urlencode。

修正方案

方案1:接口接受JSON格式(最常见)

直接将字典传给json参数,requests会自动完成序列化并设置正确的头部:

loginin = {"username": USER, "password": PASSWORD}
# 无需手动设置content-type,requests会自动添加正确的头部
rlogin = requests.post(urllogin, json=loginin, verify=False)
rlogin.raise_for_status()
print("status_code:", rlogin.status_code)
if rlogin.status_code == 200:
    resplogin = rlogin.json()  # 直接用response.json()解析返回结果
    print("resplogin", resplogin)

方案2:接口接受表单格式(application/x-www-form-urlencoded)

将字典传给data参数,requests会自动处理编码和头部:

loginin = {"username": USER, "password": PASSWORD}
rlogin = requests.post(urllogin, data=loginin, verify=False)
rlogin.raise_for_status()
print("status_code:", rlogin.status_code)
if rlogin.status_code == 200:
    resplogin = rlogin.json()
    print("resplogin", resplogin)

内容的提问来源于stack exchange,提问作者Ajita Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:15:42