Debian 上手调用 API:从 curl 到 Python 脚本实战
Debian API接口调用教程|零基础可学
在日常开发、运维和自动化工作中,“调用 API 接口”是一项非常常见的技能。比如你想在 Debian 服务器上调用天气接口、短信接口、AI 接口、支付接口、监控接口,或者调用公司内部系统接口,都离不开 API 请求。
本文将以 Debian 系统为环境,从零基础出发,带你了解什么是 API、如何在 Debian 上准备工具、如何使用 curl 调用接口、如何处理 GET/POST 请求、如何传递 Token、如何解析 JSON 数据,并进一步介绍使用 Python 编写 API 调用脚本的方法。
一、什么是 API 接口?
API,全称是 Application Programming Interface,中文通常叫做“应用程序编程接口”。
简单来说,API 就是两个程序之间通信的规则。
举个例子:
你在浏览器中打开一个天气 App,输入城市名后,App 会向天气服务器发送请求,服务器返回天气数据,比如温度、湿度、天气状况等。这个“请求和返回数据”的过程,就是通过 API 完成的。
常见 API 返回的数据格式有:
- JSON
- XML
- HTML
- 纯文本
目前最常见的是 JSON 格式。
例如,一个 API 返回的 JSON 数据可能长这样:
{
"city": "Beijing",
"temperature": 26,
"weather": "sunny"
}
在 Debian 系统中,我们可以通过命令行工具或编程语言来调用这些 API。
二、Debian 环境准备
在开始之前,你需要有一台 Debian 系统。可以是:
- 本地安装的 Debian
- 云服务器上的 Debian
- 虚拟机中的 Debian
- WSL 中的 Debian
本文示例适用于 Debian 10、Debian 11、Debian 12 等版本。
首先更新软件源:
sudo apt update
建议顺便升级系统软件包:
sudo apt upgrade -y
三、安装常用 API 调用工具
在 Debian 上调用 API,最常用的工具是:
curl:命令行 HTTP 请求工具wget:下载工具,也可请求接口jq:JSON 格式化和解析工具python3:编写 API 调用脚本pip:Python 包管理器
安装这些工具:
sudo apt install -y curl wget jq python3 python3-pip
检查是否安装成功:
curl --version
jq --version
python3 --version
pip3 --version
如果都能看到版本号,说明环境准备完成。
四、API 请求的基本概念
在调用 API 前,需要理解几个核心概念。
1. 请求地址 URL
API 通常会提供一个接口地址,例如:
https://api.example.com/user
这个地址就是请求的目标。
2. 请求方法 Method
常见 HTTP 请求方法包括:
| 方法 | 作用 |
|---|---|
| GET | 获取数据 |
| POST | 提交数据 |
| PUT | 更新完整数据 |
| PATCH | 更新部分数据 |
| DELETE | 删除数据 |
最常见的是 GET 和 POST。
3. 请求参数
参数是发送给 API 的数据。
GET 请求的参数通常放在 URL 后面:
https://api.example.com/search?keyword=debian&page=1
POST 请求的参数通常放在请求体中。
4. 请求头 Header
请求头用于传递额外信息,比如数据格式、身份认证信息等。
常见请求头:
Content-Type: application/json
Authorization: Bearer xxxxx
5. 响应结果 Response
API 请求成功后,服务器会返回响应数据,例如:
{
"code": 200,
"message": "success",
"data": {
"id": 1,
"name": "Debian"
}
}
五、使用 curl 调用 GET 接口
curl 是 Debian 中最常用的 API 调用工具。
假设有一个测试接口:
https://httpbin.org/get
我们可以这样请求:
curl https://httpbin.org/get
你会看到类似返回:
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.xx.x"
},
"url": "https://httpbin.org/get"
}
这个接口会把你请求的信息返回出来,适合练习。
六、GET 请求携带参数
GET 请求参数一般拼接在 URL 后面。
例如:
curl "https://httpbin.org/get?name=debian&version=12"
注意:URL 中包含 & 时,建议用英文双引号包起来,否则 Shell 可能会把 & 当作后台运行符号。
返回结果中可以看到:
"args": {
"name": "debian",
"version": "12"
}
这说明参数已经传递成功。
七、格式化 JSON 输出
直接用 curl 返回的数据可能不够美观,可以搭配 jq 使用。
curl -s "https://httpbin.org/get?name=debian&version=12" | jq
其中:
-s表示静默模式,不显示下载进度| jq表示把返回结果交给 jq 格式化
如果只想提取某个字段,比如 URL:
curl -s "https://httpbin.org/get?name=debian&version=12" | jq '.url'
提取参数中的 name:
curl -s "https://httpbin.org/get?name=debian&version=12" | jq '.args.name'
八、使用 curl 调用 POST 接口
POST 请求通常用于提交数据,例如登录、创建用户、提交表单等。
测试接口:
https://httpbin.org/post
使用表单方式提交:
curl -X POST https://httpbin.org/post \
-d "username=admin" \
-d "password=123456"
参数说明:
-X POST指定请求方法为 POST-d用于发送表单数据
返回结果中会包含:
"form": {
"password": "123456",
"username": "admin"
}
九、POST 请求发送 JSON 数据
现在很多 API 都要求发送 JSON 格式数据。
示例:
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
这里重点是:
-H "Content-Type: application/json"
它告诉服务器:我发送的是 JSON 数据。
建议加上 jq 格式化:
curl -s -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}' | jq
十、调用需要 Token 的 API
很多真实 API 都需要身份认证。最常见的是 Token 认证。
例如接口文档可能要求你传递:
Authorization: Bearer your_token_here
在 Debian 中可以这样写:
curl -X GET https://api.example.com/user/profile \
-H "Authorization: Bearer your_token_here"
如果是 POST JSON 请求:
curl -X POST https://api.example.com/data \
-H "Authorization: Bearer your_token_here" \
-H "Content-Type: application/json" \
-d '{"title":"hello","content":"debian api test"}'
十一、使用环境变量保存 Token
不建议把 Token 明文写在命令历史或脚本中。可以使用环境变量。
临时设置:
export API_TOKEN="your_token_here"
调用时使用:
curl https://api.example.com/user/profile \
-H "Authorization: Bearer $API_TOKEN"
如果希望长期生效,可以写入 ~/.bashrc:
echo 'export API_TOKEN="your_token_here"' >> ~/.bashrc
source ~/.bashrc
不过需要注意:如果服务器多人共用,不要随意把敏感 Token 放在容易被查看的地方。
十二、查看详细请求过程
当 API 调用失败时,可以使用 -v 参数查看详细请求过程。
curl -v https://httpbin.org/get
你可以看到:
- DNS 解析过程
- TLS 握手过程
- 请求头
- 响应头
- HTTP 状态码
如果只想查看响应头:
curl -I https://httpbin.org/get
常见状态码如下:
| 状态码 | 含义 |
|---|---|
| 200 | 请求成功 |
| 201 | 创建成功 |
| 400 | 请求参数错误 |
| 401 | 未认证,Token 错误或缺失 |
| 403 | 无权限访问 |
| 404 | 接口不存在 |
| 429 | 请求过于频繁 |
| 500 | 服务器内部错误 |
| 502/503 | 网关或服务不可用 |
十三、处理 HTTPS 证书问题
有些内网 API 使用自签名证书,调用时可能出现证书错误。
错误类似:
SSL certificate problem: self signed certificate
临时测试可以使用:
curl -k https://your-api.example.com
-k 表示忽略证书验证。
但生产环境不建议长期使用 -k,更推荐正确配置 CA 证书。
Debian 安装 CA 证书包:
sudo apt install -y ca-certificates
sudo update-ca-certificates
十四、设置请求超时时间
为了避免 API 卡住不返回,建议设置超时时间。
例如设置最大请求时间为 10 秒:
curl --max-time 10 https://httpbin.org/get
设置连接超时为 5 秒:
curl --connect-timeout 5 https://httpbin.org/get
组合使用:
curl --connect-timeout 5 --max-time 15 https://httpbin.org/get
十五、保存 API 返回结果到文件
有时需要把 API 返回结果保存起来。
保存到文件:
curl -s https://httpbin.org/get -o result.json
查看文件:
cat result.json | jq
如果想追加日志:
curl -s https://httpbin.org/get >> api.log
十六、用 Bash 编写简单 API 调用脚本
创建脚本文件:
nano call_api.sh
写入:
#!/bin/bash
API_URL="https://httpbin.org/get"
NAME="debian"
VERSION="12"
response=$(curl -s "${API_URL}?name=${NAME}&version=${VERSION}")
echo "接口返回结果:"
echo "$response" | jq
保存后赋予执行权限:
chmod +x call_api.sh
运行:
./call_api.sh
这个脚本完成了:
- 定义 API 地址
- 定义请求参数
- 使用 curl 调用接口
- 用 jq 格式化输出结果
十七、判断 API 是否调用成功
在脚本中,我们通常需要判断接口是否成功。
可以使用 curl -w 获取 HTTP 状态码:
curl -s -o response.json -w "%{http_code}" https://httpbin.org/get
示例脚本:
#!/bin/bash
URL="https://httpbin.org/get"
http_code=$(curl -s -o response.json -w "%{http_code}" "$URL")
if [ "$http_code" = "200" ]; then
echo "API 调用成功"
cat response.json | jq
else
echo "API 调用失败,状态码:$http_code"
cat response.json
fi
这样就可以根据状态码进行不同处理。
十八、使用 Python 调用 API
除了 curl,Python 也是非常适合调用 API 的语言。
首先安装 requests 库:
pip3 install requests
如果 Debian 提示不建议直接安装到系统环境,可以使用虚拟环境:
sudo apt install -y python3-venv
python3 -m venv api-env
source api-env/bin/activate
pip install requests
创建 Python 文件:
nano api_test.py
写入代码:
import requests
url = "https://httpbin.org/get"
params = {
"name": "debian",
"version": "12"
}
response = requests.get(url, params=params)
print("状态码:", response.status_code)
print("返回内容:")
print(response.json())
运行:
python3 api_test.py
十九、Python 发送 POST JSON 请求
示例代码:
import requests
url = "https://httpbin.org/post"
data = {
"username": "admin",
"password": "123456"
}
headers = {
"Content-Type": "application/json"
}
response = requests.post(url, json=data, headers=headers)
print("状态码:", response.status_code)
print(response.json())
注意:
requests.post(url, json=data)
会自动把 Python 字典转换为 JSON,并设置合适的数据格式。
二十、Python 调用 Token 接口
示例:
import os
import requests
token = os.getenv("API_TOKEN")
if not token:
raise ValueError("请先设置 API_TOKEN 环境变量")
url = "https://api.example.com/user/profile"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.get(url, headers=headers, timeout=10)
print("状态码:", response.status_code)
if response.status_code == 200:
print(response.json())
else:
print("请求失败:", response.text)
运行前设置 Token:
export API_TOKEN="your_token_here"
python3 api_token_demo.py
二十一、API 调用常见错误与解决办法
1. curl: command not found
说明没有安装 curl。
解决:
sudo apt install -y curl
2. jq: command not found
说明没有安装 jq。
解决:
sudo apt install -y jq
3. 401 Unauthorized
通常表示认证失败。
检查:
- Token 是否正确
- Token 是否过期
- 请求头格式是否正确
- 是否需要
Bearer前缀
4. 403 Forbidden
表示没有权限访问。
可能原因:
- 当前账号没有接口权限
- IP 不在白名单
- API Key 权限不足
- 请求频率被限制
5. 404 Not Found
表示接口地址不存在。
检查:
- URL 是否写错
- API 版本是否正确
- 路径是否缺少前缀
- 是否应使用
/api/v1/xxx
6. 429 Too Many Requests
表示请求太频繁。
解决方式:
- 降低请求频率
- 增加重试间隔
- 查看 API 限流规则
- 联系服务商提高额度
7. Connection timed out
连接超时。
检查:
- 网络是否正常
- DNS 是否可解析
- 服务器防火墙是否拦截
- API 服务是否在线
二十二、API 调用安全建议
在 Debian 服务器上调用 API 时,一定要注意安全。
建议:
- 不要把 Token 写死在公开脚本中
- 不要把密钥提交到 Git 仓库
- 给脚本文件设置合适权限
- 使用 HTTPS 接口
- 定期轮换 API Key
- 生产环境不要随意使用
curl -k - 对接口返回数据进行校验
- 设置请求超时,避免程序长时间阻塞
例如设置脚本权限:
chmod 700 api_script.sh
如果配置文件中包含密钥,也应该限制权限:
chmod 600 config.env
二十三、一个完整的实战示例
下面写一个完整 Bash 示例:调用 API、携带 Token、提交 JSON、保存响应、判断状态码。
创建文件:
nano submit_data.sh
写入:
#!/bin/bash
API_URL="https://httpbin.org/post"
TOKEN="${API_TOKEN}"
if [ -z "$TOKEN" ]; then
echo "错误:请先设置 API_TOKEN 环境变量"
exit 1
fi
JSON_DATA='{
"title": "Debian API Test",
"content": "This is a test request from Debian.",
"type": "demo"
}'
http_code=$(curl -s -o response.json -w "%{http_code}" \
-X POST "$API_URL" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$JSON_DATA")
if [ "$http_code" = "200" ]; then
echo "提交成功,接口返回:"
cat response.json | jq
else
echo "提交失败,HTTP 状态码:$http_code"
echo "响应内容:"
cat response.json
fi
赋予执行权限:
chmod +x submit_data.sh
设置 Token:
export API_TOKEN="test_token_123"
运行:
./submit_data.sh
虽然这里使用的是测试接口 httpbin.org,但结构和真实业务接口非常接近。你只需要把 API_URL 换成真实接口地址,把 JSON 数据改成接口文档要求的字段即可。
二十四、学习 API 调用的正确方法
如果你是零基础,建议按照下面顺序练习:
- 先理解 GET 和 POST 的区别
- 使用
curl调用公开测试接口 - 学会查看状态码和响应内容
- 学会使用
jq解析 JSON - 学会传递 Header 和 Token
- 学会写 Bash 脚本自动调用
- 学会用 Python requests 编写更复杂逻辑
- 阅读真实 API 文档并逐步测试
刚开始不要急着写复杂项目,先把一个接口请求成功,再逐步加入参数、认证、错误处理和日志记录。
总结
在 Debian 中调用 API 并不复杂,核心工具是 curl、jq 和 Python 的 requests 库。对于零基础用户来说,最重要的是理解 API 请求的基本组成:URL、请求方法、参数、请求头、请求体和响应结果。
本文从环境安装开始,介绍了 GET 请求、POST 请求、JSON 数据提交、Token 认证、状态码判断、错误排查、安全建议以及完整脚本示例。掌握这些内容后,你就可以在 Debian 服务器上完成大多数 API 调用任务,比如自动化运维、数据同步、接口测试、定时任务和业务系统集成。
如果你继续深入学习,还可以进一步掌握:
- API 签名认证
- OAuth2 授权流程
- Webhook 回调
- 定时任务调用 API
- 批量请求和并发请求
- API 日志记录和监控告警
只要多练习,你很快就能熟练在 Debian 环境中完成各种 API 接口调用。