curl是linux shell调用rest api最简可行方案,需用-f校验http状态码、jq解析json、环境变量管理凭据、设置超时参数确保稳定。

curl 命令调用 REST API 最简可行方案
Linux Shell 中调用 API,curl 是默认可用、最轻量且兼容性最好的选择。不用装额外工具,只要系统联网、curl 在 PATH 中(绝大多数发行版预装),就能发 GET/POST 请求。
常见错误是漏掉 -X 或混淆 -d 与 --data-urlencode:前者直接发送原始字符串(含空格或特殊字符易出错),后者自动编码键值对。
- GET 请求带参数:
curl "https://httpbin.org/get?name=alice&age=30" - POST 表单提交:
curl -X POST -d "user=admin&pass=123" https://httpbin.org/post - POST JSON 数据(注意引号和 Content-Type):
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://httpbin.org/post - 带认证的请求:
curl -u "user:pass" https://api.example.com/v1/data
处理 API 返回的 JSON 响应:jq 是刚需
Shell 本身不解析 JSON,裸用 curl 拿到的是纯文本。不加处理就用 grep 或 awk 提取字段,极易因格式缩进、换行、嵌套结构而失效——比如 grep "id" 可能匹配到注释或字段名子串。
jq 是专为 Shell 处理 JSON 设计的过滤器,安装简单(apt install jq 或 yum install jq),语法直观。
- 提取单个字段:
curl -s https://httpbin.org/json | jq '.slideshow.title' - 过滤数组元素:
curl -s https://jsonplaceholder.typicode.com/posts/1/comments | jq '.[] | select(.email | contains("gmail")) | .name' - 转成 shell 变量(注意用
$(...)和双引号):status=$(curl -s https://httpbin.org/status/200 | jq -r 'if .status == 200 then "ok" else "fail" end')
错误处理不能只靠 $?:HTTP 状态码要显式检查
curl 默认只要网络通、服务器有响应,即使返回 404 或 500,其退出码仍是 0。仅靠 $? 判断会误认为成功。
必须用 -f 参数让 curl 在 HTTP 错误状态时返回非零退出码,再配合 || 或 if 捕获。
- 基础错误拦截:
curl -f -s https://httpbin.org/status/404 || echo "API failed with HTTP error" - 区分错误类型(结合
-w输出状态码):http_code=$(curl -s -o /dev/null -w "%{http_code}" https://httpbin.org/status/401); if [ "$http_code" = "401" ]; then echo "Unauthorized"; fi - 超时控制很重要:
curl --max-time 10 --connect-timeout 5 -f ...,避免脚本卡死
敏感信息别硬编码:用环境变量或配置文件加载 Token
把 API Key、Token 直接写在脚本里,不仅不安全,还导致多环境切换困难。Shell 中推荐用环境变量注入,而非 export 写死在脚本中。
例如,脚本开头检查:[ -z "$API_TOKEN" ] && { echo "API_TOKEN not set"; exit 1; },然后调用时用 -H "Authorization: Bearer $API_TOKEN"。
- 本地测试:运行前执行
export API_TOKEN=xxx - CI/CD 场景:通过平台密钥管理功能注入环境变量
- 临时调试可读配置文件:
source ./secrets.env,但确保该文件不在 Git 中且权限为600 - 绝对不要在命令行历史中暴露 token:
curl -H "Authorization: Bearer xxx"会被记录,改用变量引用
API 调用看着简单,真正稳定落地的关键在于:状态码校验是否严格、JSON 解析是否可靠、凭据是否隔离、超时是否可控——这四点漏掉任一,线上脚本都可能静默失败。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










