需通过宝塔API自动化建站,先启用API并获取密钥,再按时间戳+随机串+密钥拼接后SHA256签名,最后用POST调用/site/create_site接口提交域名、路径、运行环境等参数。

如果您希望借助第三方程序自动化创建网站,需通过宝塔面板开放的API接口发送请求。宝塔面板默认启用本地HTTPS并要求身份认证,调用前必须获取有效的API密钥与面板地址,并确保目标服务器已开启API功能。以下是具体操作步骤:
一、启用并获取宝塔面板API密钥
宝塔面板API默认关闭,需手动开启并生成唯一密钥用于签名验证。该密钥是后续所有接口调用的身份凭证,不可泄露。
1、登录宝塔面板后台,点击左侧菜单栏的“设置” → “面板设置”。
2、在面板设置页面中,找到“API接口”区域,勾选“启用API接口”。
3、点击“保存”后,页面将显示当前API密钥及过期时间;若需更新,请点击“重新生成密钥”。
4、记录下API密钥(key)和面板绑定域名或IP地址(如 https://192.168.1.100:8888),二者缺一不可。
二、构造API请求签名参数
宝塔API采用时间戳+随机字符串+密钥哈希签名机制,所有POST请求必须携带sign参数,否则返回401错误。签名逻辑不可省略,必须由调用方自行计算。
1、生成长度为12位的随机字符串(如:aB3xK9mQpL2v)。
2、获取当前时间的秒级时间戳(如:1718234567)。
3、将随机字符串、时间戳与API密钥按顺序拼接为:随机字符串 + 时间戳 + API密钥。
4、对拼接后的字符串进行SHA256哈希运算,结果即为sign参数值。
5、将随机字符串、时间戳、sign作为请求头字段,分别传入X-Sign、X-Time、X-Nonce。
三、调用网站创建接口(/site/create_site)
该接口用于提交建站参数,触发宝塔自动配置Nginx/Apache、创建根目录、生成SSL证书等操作。请求体必须为JSON格式,且字段名严格匹配。
1、设置HTTP请求方法为POST,请求URL为:https://您的面板地址:8888/site/create_site。
2、在请求头中添加:Content-Type: application/json。
3、在请求头中添加签名三要素:X-Sign: 计算出的SHA256值、X-Time: 时间戳、X-Nonce: 随机字符串。
4、构造JSON请求体,包含以下必填字段:webname(域名,如example.com)、path(站点根目录绝对路径,如/www/wwwroot/example.com)、type(运行环境类型,如php)、php_version(PHP版本,如74)。
5、发送请求,成功响应将返回JSON格式的result字段为true及site_id。
四、使用curl命令行直接测试接口
适用于Linux服务器本地调试,可快速验证API连通性与参数合法性,无需编写完整程序即可确认基础流程是否可行。
1、打开终端,执行以下命令(请将YOUR_KEY、YOUR_DOMAIN、NONCE、TIMESTAMP、SIGN替换为实际值):
2、输入:curl -X POST "https://YOUR_DOMAIN:8888/site/create_site" -H "Content-Type: application/json" -H "X-Nonce: NONCE" -H "X-Time: TIMESTAMP" -H "X-Sign: SIGN" -d '{"webname":"test.example.com","path":"/www/wwwroot/test.example.com","type":"php","php_version":"74"}'。
3、检查返回内容是否包含"status":true及站点ID信息。
4、若返回错误码如-100,表示签名失败;返回-101表示参数缺失;返回-102表示域名已被占用。
五、通过Python脚本自动化调用
Python具备丰富HTTP库支持,适合集成进CI/CD流程或运维平台。使用requests库可简化HTTPS证书验证、JSON序列化与头部注入过程。
1、安装依赖:pip install requests。
2、导入模块:import requests, time, hashlib, json, random, string。
3、定义函数生成随机字符串:def get_random_string(length=12): return ''.join(random.choices(string.ascii_letters + string.digits, k=length))。
4、构造签名字符串并计算SHA256:sign_str = nonce + str(timestamp) + api_key; sign = hashlib.sha256(sign_str.encode()).hexdigest()。
5、构建headers与data字典,调用requests.post发送请求,捕获response.text输出原始响应。










