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

将CURL请求转为Python请求后返回400错误,求技术解决

问题排查与修正

你的Python代码存在两个核心问题,导致返回400错误:

  1. Basic Auth未做Base64编码
    原curl命令中,$basic_auth是通过echo -n $client_id:$client_secret | base64生成的Base64编码字符串,但你的代码直接将client_id:client_secret明文放到了请求头里,不符合认证要求。

  2. 请求数据格式错误
    curl的-d参数是发送**表单格式(application/x-www-form-urlencoded)**的数据,而你用了json=data,会把数据以JSON格式发送,API服务端无法解析。

修正后的代码

import requests
import base64

client_id = 'XXX'
client_secret = 'YYYYYYYYYYYYYY'
token_url = 'https://tokenurl.com'

# 对client_id:client_secret进行Base64编码
basic_auth_str = f"{client_id}:{client_secret}"
basic_auth = base64.b64encode(basic_auth_str.encode('utf-8')).decode('utf-8')

headers = {'Authorization': f"Basic {basic_auth}"}
# 使用data参数发送表单格式数据,而非json参数
data = {'client_id': client_id, 'grant_type': 'client_credentials'}

response = requests.post(token_url, headers=headers, data=data)
# 可打印响应内容进一步排查问题
print(response.status_code)
print(response.text)

另外,也可以直接使用requests库自带的HTTPBasicAuth简化认证流程,效果完全一致:

import requests

client_id = 'XXX'
client_secret = 'YYYYYYYYYYYYYY'
token_url = 'https://tokenurl.com'

data = {'client_id': client_id, 'grant_type': 'client_credentials'}
# 用auth参数自动处理Basic Auth的编码逻辑
response = requests.post(token_url, auth=(client_id, client_secret), data=data)

print(response.status_code)
print(response.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:01:13