登录
首页 >  文章 >  linux

LinuxShell调用API实战教程

时间:2026-05-08 12:42:55 320浏览 收藏

本文深入讲解了在Linux Shell中稳定、安全调用REST API的实战要点,以curl为基石,强调必须使用-f校验HTTP状态码、jq精准解析JSON响应、环境变量隔离敏感凭据、以及合理设置超时参数——四大关键实践缺一不可,帮你避开裸用curl的常见陷阱,让API调用脚本真正健壮可靠、可维护、可上线。

Linux如何在Shell中调用API_Linux Shell中调用API指南

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 拿到的是纯文本。不加处理就用 grepawk 提取字段,极易因格式缩进、换行、嵌套结构而失效——比如 grep "id" 可能匹配到注释或字段名子串。

jq 是专为 Shell 处理 JSON 设计的过滤器,安装简单(apt install jqyum 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 解析是否可靠、凭据是否隔离、超时是否可控——这四点漏掉任一,线上脚本都可能静默失败。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>