Debian 调用 API 实战指南:curl、HTTPie、Python 命令一次搞定
Debian API接口调用教程|附完整命令
在 Debian 系统中调用 API 接口,是服务器运维、后端开发、自动化脚本、数据采集和系统集成中非常常见的操作。无论你是想调用第三方 REST API,还是测试自己部署的后端服务,Debian 都提供了非常稳定、灵活的环境。
本文将以 Debian 系统为基础,详细介绍如何使用 curl、wget、HTTPie、Python、Shell 脚本 等方式调用 API 接口,并附带完整命令示例,适合新手学习,也适合开发者作为日常参考。
一、什么是 API 接口调用?
API,全称是 Application Programming Interface,即应用程序编程接口。简单来说,API 就是不同软件系统之间进行数据交互的通道。
例如:
- 你想查询天气数据,可以调用天气 API;
- 你想获取服务器状态,可以调用监控系统 API;
- 你想让前端页面获取后端数据,可以调用后端 REST API;
- 你想自动上传文件、发送消息、创建订单,也可以通过 API 完成。
常见的 API 请求方式包括:
| 请求方法 | 说明 |
|---|---|
| GET | 获取数据 |
| POST | 提交数据 |
| PUT | 更新完整数据 |
| PATCH | 更新部分数据 |
| DELETE | 删除数据 |
常见的数据格式包括:
- JSON
- XML
- Form 表单
- 文件流
- URL 参数
在 Debian 中,最常用的 API 调用工具是 curl。
二、准备 Debian 环境
本文命令适用于 Debian 10、Debian 11、Debian 12 及以上版本。
首先更新软件源:
sudo apt update
建议同时升级系统软件包:
sudo apt upgrade -y
查看 Debian 版本:
cat /etc/debian_version
或:
lsb_release -a
如果系统没有 lsb_release 命令,可以安装:
sudo apt install lsb-release -y
三、安装常用 API 调用工具
1. 安装 curl
curl 是 Linux 下最常用的接口调用工具,可以发送 GET、POST、PUT、DELETE 等各种 HTTP 请求。
安装命令:
sudo apt install curl -y
查看版本:
curl --version
如果能够看到版本信息,说明安装成功。
2. 安装 wget
wget 也可以访问接口,不过它更多用于下载文件。
安装命令:
sudo apt install wget -y
查看版本:
wget --version
3. 安装 HTTPie
HTTPie 是一个更适合人类阅读的命令行 HTTP 客户端,输出结果更美观。
安装命令:
sudo apt install httpie -y
查看版本:
http --version
4. 安装 jq
如果 API 返回 JSON 数据,建议安装 jq,用于格式化和解析 JSON。
安装命令:
sudo apt install jq -y
查看版本:
jq --version
四、使用 curl 调用 GET 接口
GET 请求通常用于获取数据。
假设我们调用一个测试接口:
curl https://httpbin.org/get
如果想显示更详细的请求过程,可以加上 -v 参数:
curl -v https://httpbin.org/get
如果想让 JSON 输出更加美观,可以结合 jq:
curl -s https://httpbin.org/get | jq
其中:
-s表示静默模式,不显示进度条;jq用于格式化 JSON 输出。
五、GET 请求携带参数
GET 请求参数通常拼接在 URL 后面,例如:
curl "https://httpbin.org/get?name=debian&version=12"
注意:URL 中如果包含 &,建议使用引号包裹,否则 Shell 可能会将其识别为后台执行符号。
也可以使用 --get 和 --data-urlencode 自动编码参数:
curl -G "https://httpbin.org/get" \
--data-urlencode "name=debian" \
--data-urlencode "version=12" \
--data-urlencode "keyword=API 接口调用"
这种方式适合参数中包含中文、空格或特殊字符的情况。
六、使用 curl 调用 POST JSON 接口
POST 请求通常用于提交数据。最常见的是提交 JSON 数据。
完整命令如下:
curl -X POST "https://httpbin.org/post" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
参数说明:
-X POST:指定请求方法为 POST;-H:设置请求头;Content-Type: application/json:表示提交的数据格式是 JSON;-d:提交请求体数据。
为了让输出更清晰,可以加上 jq:
curl -s -X POST "https://httpbin.org/post" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}' | jq
七、POST 表单接口调用
有些接口不是接收 JSON,而是接收表单数据,也就是 application/x-www-form-urlencoded。
示例命令:
curl -X POST "https://httpbin.org/post" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=123456"
也可以写成多个 -d 参数:
curl -X POST "https://httpbin.org/post" \
-d "username=admin" \
-d "password=123456"
这种方式常用于传统 Web 表单、登录接口或旧系统接口。
八、携带 Token 调用 API
很多 API 都需要身份认证,最常见的是 Token 认证。
例如接口要求在请求头中携带 Bearer Token:
curl "https://api.example.com/user/info" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
如果是 POST 请求:
curl -X POST "https://api.example.com/order/create" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"product_id":1001,"quantity":2}'
为了安全,不建议直接把 Token 写死在命令中,可以使用环境变量:
export API_TOKEN="YOUR_ACCESS_TOKEN"
然后调用:
curl "https://api.example.com/user/info" \
-H "Authorization: Bearer ${API_TOKEN}"
查看环境变量:
echo $API_TOKEN
如果想取消:
unset API_TOKEN
九、Basic Auth 接口调用
部分接口使用 Basic Auth,也就是用户名和密码认证。
命令如下:
curl -u "username:password" "https://httpbin.org/basic-auth/username/password"
如果用户名是 admin,密码是 123456,示例:
curl -u "admin:123456" "https://api.example.com/private/data"
如果想查看完整响应头:
curl -i -u "admin:123456" "https://api.example.com/private/data"
其中 -i 表示同时输出响应头和响应体。
十、查看响应状态码
调用 API 时,除了响应内容,还需要关注 HTTP 状态码。
常见状态码如下:
| 状态码 | 含义 |
|---|---|
| 200 | 请求成功 |
| 201 | 创建成功 |
| 204 | 成功但无返回内容 |
| 400 | 请求参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 404 | 接口不存在 |
| 500 | 服务器内部错误 |
只输出状态码:
curl -o /dev/null -s -w "%{http_code}\n" "https://httpbin.org/get"
同时输出状态码和耗时:
curl -o /dev/null -s -w "状态码: %{http_code}\n总耗时: %{time_total}s\n" "https://httpbin.org/get"
查看更多连接信息:
curl -o /dev/null -s -w "DNS解析: %{time_namelookup}s\n连接耗时: %{time_connect}s\nTLS握手: %{time_appconnect}s\n首字节时间: %{time_starttransfer}s\n总耗时: %{time_total}s\n状态码: %{http_code}\n" "https://httpbin.org/get"
十一、保存 API 返回结果
将接口返回结果保存为文件:
curl -o result.json "https://httpbin.org/get"
静默保存:
curl -s -o result.json "https://httpbin.org/get"
保存并格式化 JSON:
curl -s "https://httpbin.org/get" | jq > result.json
查看文件:
cat result.json
格式化查看:
jq . result.json
十二、上传文件接口调用
很多接口支持文件上传,例如上传图片、日志或配置文件。
创建测试文件:
echo "Hello Debian API" > test.txt
使用 multipart/form-data 上传:
curl -X POST "https://httpbin.org/post" \
-F "file=@test.txt" \
-F "description=Debian 文件上传测试"
如果需要携带 Token:
curl -X POST "https://api.example.com/upload" \
-H "Authorization: Bearer ${API_TOKEN}" \
-F "file=@test.txt"
上传图片示例:
curl -X POST "https://api.example.com/image/upload" \
-H "Authorization: Bearer ${API_TOKEN}" \
-F "image=@/path/to/image.jpg"
十三、下载文件接口调用
如果 API 返回的是文件,可以使用 curl -O 或 -o 下载。
保留远程文件名:
curl -O "https://example.com/file.zip"
指定本地文件名:
curl -o download.zip "https://example.com/file.zip"
断点续传:
curl -C - -O "https://example.com/file.zip"
使用 wget 下载:
wget "https://example.com/file.zip"
指定文件名:
wget -O download.zip "https://example.com/file.zip"
十四、PUT、PATCH、DELETE 接口调用
1. PUT 请求
PUT 通常用于完整更新资源:
curl -X PUT "https://httpbin.org/put" \
-H "Content-Type: application/json" \
-d '{"id":1,"name":"Debian 12","status":"active"}'
2. PATCH 请求
PATCH 通常用于局部更新资源:
curl -X PATCH "https://httpbin.org/patch" \
-H "Content-Type: application/json" \
-d '{"status":"disabled"}'
3. DELETE 请求
DELETE 用于删除资源:
curl -X DELETE "https://httpbin.org/delete?id=1001"
携带 Token 的 DELETE 请求:
curl -X DELETE "https://api.example.com/users/1001" \
-H "Authorization: Bearer ${API_TOKEN}"
十五、使用 HTTPie 调用 API
如果你觉得 curl 参数较多,可以使用 HTTPie。
GET 请求:
http GET https://httpbin.org/get
GET 携带参数:
http GET https://httpbin.org/get name==debian version==12
注意 HTTPie 中:
name==debian表示 URL 查询参数;name=debian表示请求体字段。
POST JSON 请求:
http POST https://httpbin.org/post username=admin password=123456
携带请求头:
http GET https://api.example.com/user/info Authorization:"Bearer ${API_TOKEN}"
POST 携带 Token:
http POST https://api.example.com/order/create \
Authorization:"Bearer ${API_TOKEN}" \
product_id:=1001 quantity:=2
其中 := 表示数字或布尔类型,不会被当成字符串。
十六、使用 Python 调用 API
在 Debian 中,Python 也非常适合调用 API,尤其适合写自动化脚本。
安装 Python 和 pip:
sudo apt install python3 python3-pip -y
安装 requests 库:
pip3 install requests
如果系统提示不允许全局安装,可以使用虚拟环境:
sudo apt install python3-venv -y
python3 -m venv api-env
source api-env/bin/activate
pip install requests
创建 Python 文件:
nano call_api.py
写入以下内容:
import requests
url = "https://httpbin.org/post"
headers = {
"Content-Type": "application/json"
}
data = {
"username": "admin",
"password": "123456"
}
response = requests.post(url, headers=headers, json=data)
print("状态码:", response.status_code)
print("响应内容:")
print(response.text)
执行脚本:
python3 call_api.py
如果要格式化 JSON:
import requests
import json
url = "https://httpbin.org/get"
response = requests.get(url)
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
十七、编写 Shell 脚本批量调用 API
如果需要定时调用接口,可以写 Shell 脚本。
创建脚本:
nano call_api.sh
写入内容:
#!/bin/bash
API_URL="https://httpbin.org/post"
API_TOKEN="YOUR_ACCESS_TOKEN"
RESPONSE=$(curl -s -X POST "$API_URL" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"server":"debian","status":"ok"}')
echo "接口返回:"
echo "$RESPONSE" | jq
添加执行权限:
chmod +x call_api.sh
运行脚本:
./call_api.sh
如果要把调用日志保存下来:
./call_api.sh >> api.log 2>&1
查看日志:
tail -f api.log
十八、设置定时任务调用 API
Debian 中可以使用 cron 定时调用 API。
编辑定时任务:
crontab -e
每分钟调用一次脚本:
* * * * * /home/debian/call_api.sh >> /home/debian/api-cron.log 2>&1
每天凌晨 2 点调用一次:
0 2 * * * /home/debian/call_api.sh >> /home/debian/api-cron.log 2>&1
查看当前定时任务:
crontab -l
查看 cron 服务状态:
systemctl status cron
启动 cron:
sudo systemctl start cron
设置开机自启:
sudo systemctl enable cron
十九、常见问题与排查方法
1. 接口无法访问
先测试网络:
ping api.example.com
测试端口连通性:
nc -vz api.example.com 443
如果没有 nc 命令,安装:
sudo apt install netcat-openbsd -y
2. HTTPS 证书报错
如果遇到证书问题,可以先确认系统证书包:
sudo apt install ca-certificates -y
sudo update-ca-certificates
不推荐但可临时跳过证书验证:
curl -k https://api.example.com
注意:生产环境不建议使用 -k,因为会降低安全性。
3. JSON 格式错误
可以使用 jq 检查 JSON:
echo '{"name":"debian"}' | jq
如果 JSON 格式错误,jq 会提示解析失败。
4. 接口超时
设置最大超时时间:
curl --max-time 10 "https://api.example.com/data"
设置连接超时时间:
curl --connect-timeout 5 "https://api.example.com/data"
5. 查看请求详情
使用 -v 查看详细请求过程:
curl -v "https://httpbin.org/get"
只查看响应头:
curl -I "https://httpbin.org/get"
输出请求和响应详细调试信息:
curl --trace-ascii debug.log "https://httpbin.org/get"
查看调试日志:
cat debug.log
二十、安全建议
在 Debian 中调用 API 时,建议注意以下几点:
- 不要把 Token、密码写死在脚本中,尽量使用环境变量或配置文件;
- 不要在公共终端中直接输入敏感信息,命令历史可能会保存;
- 生产环境不要使用
curl -k,应正确配置 HTTPS 证书; - 为 API 设置超时时间,避免脚本长期阻塞;
- 记录日志时避免输出敏感数据;
- 使用最小权限 Token,不要给自动化脚本配置过高权限;
- 定期轮换密钥和 Token。
如果担心命令历史泄露 Token,可以清理历史:
history -c
或删除历史文件:
rm -f ~/.bash_history
也可以在命令前加一个空格,并确保 Bash 启用了忽略空格历史记录:
export HISTCONTROL=ignorespace
二十一、完整实战示例:登录后调用用户信息接口
下面给出一个完整流程示例:先调用登录接口获取 Token,再使用 Token 调用用户信息接口。
创建脚本:
nano api_login_demo.sh
写入内容:
#!/bin/bash
LOGIN_URL="https://api.example.com/login"
USER_INFO_URL="https://api.example.com/user/info"
USERNAME="admin"
PASSWORD="123456"
TOKEN=$(curl -s -X POST "$LOGIN_URL" \
-H "Content-Type: application/json" \
-d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}" \
| jq -r '.token')
if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then
echo "登录失败,未获取到 Token"
exit 1
fi
echo "Token 获取成功"
curl -s "$USER_INFO_URL" \
-H "Authorization: Bearer ${TOKEN}" \
| jq
添加执行权限:
chmod +x api_login_demo.sh
运行:
./api_login_demo.sh
这个脚本适合改造成自动化任务,例如定时查询账户信息、同步数据或触发远程任务。
总结
在 Debian 中调用 API 接口并不复杂,核心工具主要是 curl、jq、HTTPie 和 Python requests。其中:
- 临时测试接口,推荐使用
curl; - 需要美观输出,推荐使用
HTTPie; - 需要解析 JSON,推荐使用
jq; - 需要复杂逻辑或批量处理,推荐使用 Python;
- 需要定时执行,推荐结合 Shell 脚本和 cron。
掌握这些命令后,你就可以在 Debian 服务器上完成接口测试、自动化运维、数据同步、文件上传下载、监控告警等大量实际工作。