宝塔API接口默认关闭,需在面板设置中手动开启并配置API密钥、IP白名单;调用需严格校验request_token、request_time与sign三元组签名;上传文件路径须为绝对路径且属主权限需匹配。

宝塔API接口默认是关闭的,必须手动开启
宝塔面板安装完后,/api/ 路径直接返回 404 或拒绝访问,不是你配置错了,而是 API 功能压根没启用。它和网站、数据库这些服务不同,不随面板启动而自动激活。
实操建议:
- 登录宝塔后台 → 左侧「设置」→ 「面板设置」→ 拉到底部勾选「开启API接口」
- 务必设置「API密钥」并保存——这个密钥后续所有请求都得带上,丢失只能重置,没有找回机制
- 注意「IP白名单」:如果留空,任何能访问面板的 IP 都可调用;填了就只允许指定 IP(比如你的 CI 服务器),但填错会导致自动化脚本连不上,报
401 Unauthorized
调用 GetPanelInfo 前先验证基础连通性和鉴权
很多自动化脚本卡在第一步,不是接口写错,而是连不通或鉴权失败。宝塔 API 不走 session,全靠 request_token + request_time + sign 三元组签名,缺一不可。
常见错误现象:
-
{"code":401,"msg":"身份验证失败"}:多半是密钥填错、时间戳偏差超 5 分钟、或 sign 算错(注意:sign 是对参数按字典序拼接后 + 密钥再做 sha256) -
{"code":500,"msg":"内部错误"}:通常是 POST 数据没设Content-Type: application/json,或者 JSON 格式有非法逗号/引号
最简验证命令(替换 YOUR_API_KEY 和 PANEL_URL):
curl -X POST "https://PANEL_URL:8888/api/GetPanelInfo" \
-H "Content-Type: application/json" \
-d '{
"request_token": "YOUR_API_KEY",
"request_time": '"$(date +%s)"',
"sign": "'"$(echo -n "request_time$(date +%s)request_tokenYOUR_API_KEY" | sha256sum | cut -d' ' -f1)"'"
}'
部署时别直接调 SiteCreate,先检查域名是否已存在
自动化部署最常翻车的点:重复创建同名站点,导致 code:1001 报错(“站点已存在”),但脚本没做判断就中断,后续流程全挂。
使用场景:CI/CD 流水线每次 push 都触发部署,但站点只需建一次。
实操建议:
- 先调
GetSites拿回所有站点列表,用site_name或domain字段比对 - 若不存在,再调
SiteCreate;若存在,直接走SetPath或UploadFile更新代码 -
SiteCreate的type_id参数要小心:1=PHP,2=Python,3=Node.js,填错会导致伪静态或运行环境异常,且创建后不能改
上传文件用 UploadFile 但路径必须带 /www/wwwroot/ 前缀
宝塔 API 的文件上传路径不是相对当前站点根目录,而是绝对路径。很多人传到 /home/project 或 ./src,结果文件躺在面板看不见的地方,重启 Nginx 也没用。
参数差异:
-
path字段必须是完整绝对路径,例如/www/wwwroot/example.com/index.html -
file字段是 base64 编码后的内容,不是本地文件路径——别把open("index.html").read()直接塞进去,得先base64.b64encode(...).decode() - 单次上传上限约 2MB,大文件得拆分或改用 FTP/SFTP 同步,API 不支持分片
容易被忽略的是权限问题:上传后的文件属主是 www,但如果你的 PHP 进程跑在 www-data 下,可能因用户组不一致导致读取失败,部署后记得补一句 chown -R www:www /www/wwwroot/example.com。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










