LiveCoinWatch的cURL请求转Python requests代码报400错误求助
问题排查与修复代码
错误点汇总
- 基础语法错误:
url的值、headers里的host值、x-api-key的取值都没有用引号包裹为字符串,会直接触发Python语法报错 - 多余的错误请求头:原cURL请求没有携带host头,你额外添加的host头取值错误(host应该是纯域名
api.livecoinwatch.com而非完整请求路径),错误的头信息会导致服务端校验不通过 - 请求体序列化错误:你已经手动把data写为JSON字符串了,再调用
json.dumps()会对字符串做二次序列化,最终提交的请求体格式完全不符合接口要求,是触发bad request的核心原因 - 参数取值不匹配:原cURL请求的
meta参数为false,你的代码里写为true,如果接口对参数取值有严格校验也可能导致报错
修复后的可运行代码
更推荐直接用Python字典传参,由requests自动处理序列化,避免手动写JSON出错:
import requests # 替换为你的实际API密钥 YOUR_API_KEY = "替换为你申请的真实接口密钥" headers = { 'x-api-key': YOUR_API_KEY, 'content-type': 'application/json' } url = "https://api.livecoinwatch.com/coins/list" data = { "currency": "USD", "sort": "rank", "order": "ascending", "offset": 0, "limit": 50, "meta": False } # 直接用json参数传字典,不需要手动调用json.dumps response = requests.post(url, json=data, headers=headers) # 打印状态码和返回内容方便后续排查 print(response.status_code) print(response.json())
如果习惯手动构造JSON字符串,去掉多余的序列化调用即可:
# 仅作为可选写法参考,更推荐上面的字典传参方案 data = '{"currency": "USD","sort": "rank","order": "ascending","offset": 0,"limit": 50,"meta": false}' response = requests.post(url, data=data, headers=headers)
内容的提问来源于stack exchange,提问作者Paul Hakimata
相关产品推荐
相关产品推荐

