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

使用Python Requests构造URL时curl转请求调用失败如何解决

问题根因

你的代码存在两个核心错误:

  • 误将curl的命令行功能参数--data-urlencode当作接口的请求参数名,该参数是curl自带的URL编码工具配置,不属于要传给后端的业务参数
  • 未明确参数传递位置:curl中使用--data-urlencode时,如果未附加-G/--get参数,默认会将编码后的参数放在POST请求的表单请求体中,而非URL查询参数中
与原curl行为完全一致的实现代码

原curl默认发送POST请求,参数以application/x-www-form-urlencoded格式放在请求体中,对应requests写法如下,requests会自动完成参数的URL编码,无需手动处理:

import requests

form_data = {
    'match[]': 'up'
}
resp = requests.post("http://localhost:9090/api/v1/series", data=form_data)
print(resp.json())
GET请求的实现(Prometheus接口常用调用方式)

如果你实际需要将参数拼接在URL后发送GET请求(原curl如果要实现这个效果需要额外加-G参数),对应写法如下:

import requests

query_params = {
    'match[]': 'up'
}
resp = requests.get("http://localhost:9090/api/v1/series", params=query_params)
print(resp.json())
注意事项
  • 无需在URL末尾手动添加?,requests会自动处理参数拼接的格式问题
  • 无需手动对[]这类特殊字符做转义编码,requests会自动完成符合规范的URL编码
  • -g是curl用来关闭通配符解析的参数,避免curl把[]识别为通配符报错,requests本身没有这个通配符解析逻辑,不需要额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:36:16