调接口时 curl 要拼三行,httpie 一行搞定,但有三个地方会坑你

举报
yd_231995061 发表于 2026/11/10 01:15:41 2026/11/10
【摘要】 把 curl 的 -H、-d、转义引号换成 http POST url key=value,请求响应都是彩色 JSON。但 = 和 := 类型不同、表单和查询参数容易串、会话文件是明文存的,这三个地方我各踩过一次。

把 curl 那一堆 -H、-d、转义引号换成 http POST url key=value,请求和响应都是彩色 JSON。但类型、参数位置和会话这三块,各有一次让我排查了半天。

问题

我经常在脚本里调接口。curl 写起来是这样的:

curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"name":"test","count":3,"enabled":true}'

三个地方容易出错:外层单引号里再嵌双引号,Windows 的 cmd 和 PowerShell 转义规则还不一样;-d 传的是字符串,想让 count 是数字得自己保证 JSON 合法;响应是一整行,想看某个字段得再接 | python -m json.tool 或 | jq。

httpie 写成一行:

http POST https://httpbin.org/post name=test count:=3 enabled:=true

响应直接是着色的 JSON。

第一个坑:= 和 := 不是一回事

这是最容易踩的,四个写法对应四种类型:

  • name=test → 字符串 "test"
  • count:=3 → 数字 3
  • enabled:=true → 布尔 true
  • nothing:=null → null

我第一次写 count=3,接口收到的是字符串 "3",服务端校验没过,报「类型错误 expected integer」。当时以为是接口的问题,查了半天请求体才发现。

记住一条:带冒号的是原始 JSON,不带的是字符串。:= 后面必须能按 JSON 解析,写 count:=abc 会直接报错 Invalid JSON: abc。

第二个坑:四种分隔符容易串

同一行里能同时出现 body 字段、URL 参数、请求头和文件上传,符号只差一两个字符:

  • a=1 JSON body 里的字段
  • a==1 URL 查询参数 ?a=1
  • A:1 请求头 A: 1
  • a@file.txt 把文件当该字段上传
  • a=@file.txt 文本字段取文件内容

我有一次把请求头写成 body 里的字段,服务端直接 400,因为 Content-Type 没发出去。

第三个坑:--session 存的是明文

--session 能把 cookie 和请求头存在 ~/.httpie/sessions/ 下,纯文本。方便,但共享机器上等于把登录态摊开;多账号测试也容易串号,因为默认 session 名固定。

临时用完就丢可以这样:

http --session-read-only=/tmp/a.json GET url

别用默认名往家目录里写。

三个常用场景

只拼请求不发送,用来检查自己写对了没:

http --offline --pretty=all POST https://httpbin.org/post name=test count:=3

它会打印完整请求头和格式化后的 body,一个包都不发。

下载文件看进度:

http --download https://example.com/大文件.zip

接口报错时看原始响应,不带格式化:

http --print=h Hb POST url name=test

h 是响应头,b 是 body。默认会加格式化,排查 gzip 或编码问题时反而碍事。

我的选择

脚本里批量调用还是 curl,因为不依赖装别的东西,服务器上一定有;手动排查接口一律 httpie,改一个参数只动一个词,不用重新拼引号。

装法:pip install httpie 或 brew install httpie,Windows 上用 pip 最省事。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。