API:
点击展开<code>API</code>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
/// 获取系统基础统计 static const apiGetSystemTotal = "/system?action=GetSystemTotal"; /// 获取磁盘分区信息 static const apiGetDiskInfo = "/system?action=GetDiskInfo"; /// 获取实时状态信息(CPU、内存、网络、负载) static const apiGetNetWork = "/system?action=GetNetWork"; /// 检查是否有安装任务 static const apiGetTaskCount = "/ajax?action=GetTaskCount"; /// 检查面板更新 static const apiUpdatePanel = "/ajax?action=UpdatePanel"; /// 获取网站列表 static const apiGetSites = "/data?action=getData&table=sites"; /// 获取网站分类 static const apiGetSiteTypes = "/site?action=get_site_types"; /// 获取已安装的 PHP 版本列表 static const apiGetPHPVersion = "/site?action=GetPHPVersion"; /// 创建网站 static const apiAddSite = "/site?action=AddSite"; /// 删除网站 static const apiDeleteSite = "/site?action=DeleteSite"; /// 停用网站 static const apiSiteStop = "/site?action=SiteStop"; /// 启用网站 static const apiSiteStart = "/site?action=SiteStart"; /// 网站到期时间 static const apiSetEdate = "/site?action=SetEdate"; /// 修改网站备注 static const apiSetSitePs = "/data?action=setPs&table=sites"; /// 获取网站备份列表 static const apiGetBackup = "/data?action=getData&table=backup"; /// 创建网站备份 static const apiToBackup = "/site?action=ToBackup"; /// 删网站备份 static const apiDelBackup = "/site?action=DelBackup"; /// 获取网站的域名列表 static const apiGetDataDomain = "/data?action=getData&table=domain"; /// 获取FTP static const apiGetDataFtps = "/data?action=getData&table=ftps"; /// 获取数据库 static const apiGetDataDatabases = "/data?action=getData&table=databases"; /// 添加数据库 static const apiAddDataDatabase = "/database?action=AddDatabase"; /// 添加域名 static const apiAddDomain = "/site?action=AddDomain"; /// 删除域名 static const apiDelDomain = "/site?action=DelDomain"; /// 获取可选的预定义伪静态列表 static const apiGetRewriteList = "/site?action=GetRewriteList"; /// 获取指定预定义伪静态规则内容(获取文件内容) static const apiGetFileBody = "/files?action=GetFileBody"; /// 保存伪静态规则内容(保存文件内容) static const apiSaveFileBody = "/files?action=SaveFileBody"; /// 取回指定网站的根目录 static const apiGetSiteKeyPath = "/data?action=getKey&table=sites&key=path"; /// 取回防跨站配置/运行目录/日志开关状态/可设置的运行目录列表/密码访问状态 static const apiGetDirUserINI = "/site?action=GetDirUserINI"; /// 设置防跨站状态(自动取反) static const apiSetDirUserINI = "/site?action=SetDirUserINI"; /// 设置是否写访问日志 static const apiSetLogsOpen = "/site?action=logsOpen"; /// 修改网站根目录 static const apiSetPath = "/site?action=SetPath"; /// 设置是否写访问日志 static const apiSetSiteRunPath = "/site?action=SetSiteRunPath"; /// 设置密码访问 static const apiSetHasPwd = "/site?action=SetHasPwd"; /// 关闭密码访问 static const apiCloseHasPwd = "/site?action=CloseHasPwd"; /// 获取流量限制相关配置(仅支持 nginx) static const apiGetLimitNet = "/site?action=GetLimitNet"; /// 开启或保存流量限制配置(仅支持 nginx) static const apiSetLimitNet = "/site?action=SetLimitNet"; /// 关闭流量限制(仅支持 nginx) static const apiCloseLimitNet = "/site?action=CloseLimitNet"; /// 取默认文档信息 static const apiGetIndex = "/site?action=GetIndex"; /// 设置默认文档 static const apiSetIndex = "/site?action=SetIndex"; /// 获取文件 static const apiGetDir = "/files?action=GetDir"; /// 创建数据库备份 static const apiDatabaseToBackup = "/database?action=ToBackup"; /// 重置密码 static const apiResDatabasePassword = "/database?action=ResDatabasePassword"; /// 删除数据库 static const apiDeleteDatabase = "/database?action=DeleteDatabase"; /// 修改数据库备注 static const apiSetDatabasePs = "/data?action=setPs&table=databases"; /// 删除文件 static const apiDeleteFile = "/files?action=DeleteFile"; /// 恢复数据库 static const apiInputSql = "/database?action=InputSql"; /// 添加FTP static const apiAddFtpUser = "/ftp?action=AddUser"; /// 停用启用FTP static const apiFtpStatus = "/ftp?action=SetStatus"; /// 设置FTP密码 static const apiFtpSetUserPassword = "/ftp?action=SetUserPassword"; /// 删除FTP用户 static const apiFtpDeleteUser = "/ftp?action=DeleteUser"; /// 新建目录 static const apiFileCreateDir = "/files?action=CreateDir"; /// 新建文件夹 static const apiFileCreateFile = "/files?action=CreateFile"; /// 移动文件 static const apiFileMvFile = "/files?action=MvFile"; /// 复制文件 static const apiFileCopyFile = "/files?action=CopyFile"; /// 压缩文件 static const apiFileZip = "/files?action=Zip"; /// 解压文件 static const apiFileUnZip = "/files?action=UnZip"; /// 面板操作日志 static const apiGetLogs = "/data?action=getData&table=logs&tojs=getLogs"; /// 面板运行日志 static const apiGetRunLogs = "/config?action=get_panel_error_logs"; /// 计划任务日志 static const apiGetTaskLogs = "/crontab?action=GetLogs"; /// 获取计划任务 static const apiGetCronTab = "/data?action=getData&table=crontab"; /// 网站操作日志 static const apiGetSiteLogs = "/logs/panel/get_logs_bytype"; /// 网站运行日志 static const apiGetSiteRunLogs = "/site?action=GetSiteLogs"; /// 网站错误日志 static const apiGetSiteErrLogs = "/site?action=get_site_errlog"; /// 端口规则 static const apiGetPortRulesList = "/safe/firewall/get_rules_list"; /// 端口转发 static const apiGetPortForwardsList = "/safe/firewall/get_forward_list"; /// IP规则 static const apiGetIPRulesList = "/safe/firewall/get_ip_rules_list"; /// 地区规则 static const apiGetCountryRulesList = "/safe/firewall/get_country_list"; /// 创建端口规则 static const apiCreatePortRuleList = "/safe/firewall/create_rules"; /// 删除端口规则 static const apiDeleteortRuleList = "/safe/firewall/remove_rules"; /// 删除端口规则 static const apiModifyPortRule = "/safe/firewall/modify_rules"; /// 创建IP规则 static const apiCreateIpRule = "/safe/firewall/create_ip_rules"; /// 删除IP规则 static const apiDeleteIpRule = "/safe/firewall/remove_ip_rules"; /// 删除IP规则 static const apiModifyIpRule = "/safe/firewall/modify_ip_rules"; /// 创建端口转发规则 static const apiCreateForward = "/safe/firewall/create_forward"; /// 删除端口转发规则 static const apiDeleteForward = "/safe/firewall/remove_forward"; /// 删除端口转发规则 static const apiModifyForward = "/safe/firewall/modify_forward"; /// 创建地区规则 static const apiCreateCountry = "/safe/firewall/create_country"; /// 删除地区规则 static const apiDeleteCountry = "/safe/firewall/remove_country"; /// 修改地区规则 static const apiModifyCountry = "/safe/firewall/modify_country"; /// 获取国家列表 static const apiGetCountrys = "/safe/firewall/get_countrys"; /// 获取防火墙信息 static const apiGetFirewallInfo = "/safe/firewall/get_firewall_info"; /// 获取SSH信息 static const apiGetSshInfo = "/safe/ssh/GetSshInfo"; /// 禁ping设置 static const apiSetPing = "/firewall?action=SetPing"; /// 防火墙开关设置 static const apiFirewallAdmin = "/safe/firewall/firewall_admin"; /// SSH开关设置 static const apiSetSSH = "/firewall?action=SetSshStatus"; /// 启动计划任务 static const apiStartTask = "/crontab?action=StartTask"; /// 设置计划任务状态 static const apiSetTaskStatus = "/crontab?action=set_cron_status"; /// 删除计划任务状态 static const apiDelCrontab = "/crontab?action=DelCrontab"; /// 计划任务 static const apiGetCrontabList = "/crontab?action=GetCrontab"; /// 释放内存 static const apiReMemory = "/system?action=ReMemory"; /// 获取配置 static const apiGetConfig = "/config?action=get_config"; /// 配置面板 static const apiSetPanel = "/config?action=setPanel"; /// 负载 static const apiGetLoadAverage = "/ajax?action=get_load_average"; /// CPU 内存 static const apiGetCpuIo = "/ajax?action=GetCpuIo"; /// 磁盘IO static const apiGetDiskIo = "/ajax?action=GetDiskIo"; /// 网络IO static const apiGetNetWorkIo = "/ajax?action=GetNetWorkIo"; /// 获取监控状态 static const apiSetControl = "/config?action=SetControl"; /// 获取软件列表 static const apiGetSoftList = "/plugin?action=get_soft_list"; /// 卸载软件 static const apiUnstallPlugin = "/plugin?action=uninstall_plugin"; /// 服务管理 static const apiServiceAdmin = "/system?action=ServiceAdmin"; /// 网站数据获取 static const apiGetDataList = "/crontab?action=GetDataList"; /// 数据库数据获取 static const apiGetDataBaseList = "/crontab?action=GetDatabases"; /// 添加计划任务 static const apiAddCrontab = "/crontab?action=AddCrontab"; /// 查询计划任务 static const apiGetCrondFind = "/crontab?action=get_crond_find"; /// 修改计划任务 static const apiModifyCrond = "/crontab?action=modify_crond"; /// 远程下载 static const apiDownloadFile = "/files?action=DownloadFile"; |
Python示例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# -*- coding: utf-8 -*- import hashlib import time import requests import prettytable # 宝塔面板操作类 class BtPanel: __BTURL = '' __APIKEY = '' __REQ = requests.session() # 初始化宝塔面板 def __init__(self, host: str, apisk: str): ''' :param host: 宝塔面板地址(末尾不加/) :param apisk: 宝塔面板API密钥 ''' self.__BTURL = host self.__APIKEY = apisk # 计算MD5 def __GetMD5(self, s: str): ''' 计算字符串的MD5值 :param s: 待计算的字符串 :return: MD5值 ''' m = hashlib.md5() m.update(s.encode('utf-8')) return m.hexdigest() # 签名计算 # 签名计算 def __GetToken(self): request_time = int(time.time()) # 获取请求时间戳 # 注意以下行中的改动:去除了逗号 request_token = self.__GetMD5(str(request_time) + '' + self.__GetMD5(self.__APIKEY)) return {'request_time': request_time, 'request_token': request_token} # 获取站点列表 def GetSites(self, showlog=True): ''' 获取宝塔面板站点列表 :showlog: 是否输出结果 :return: 站点列表数据 ''' if showlog: print('\n### 获取站点列表...') tk = self.__GetToken() # 获取签名 playload = { 'request_time': tk['request_time'], 'request_token': tk['request_token'], 'p': 1, 'limit': 100, 'order': 'id' } print(playload) res = self.__REQ.post(url=self.__BTURL + '/data?action=getData&table=sites', data=playload).json() # 判断请求是否成功 if 'status' in res and 'msg' in res and not res['status']: print('>>> 获取站点列表失败:', res['msg']) return False # 使用prettytable输出站点列表 if showlog: tb = prettytable.PrettyTable() tb.field_names = ['网站名', '站点类型', '备注', 'SSL域名', 'SSL到期时间', 'SSL剩余天数', '证书品牌', '状态'] tb.align['网站名'] = 'l' tb.align['备注'] = 'l' tb.align['SSL域名'] = 'l' tb.align['证书品牌'] = 'l' for site in res['data']: site_status = '运行' if site['status'] == '1' else '停止' if site['ssl'] == -1: sslinfo = {'notAfter': '-', 'endtime': '-', 'subject': '-', 'issuer': '-'} else: sslinfo = {'notAfter': site['ssl']['notAfter'], 'endtime': site['ssl']['endtime'], 'subject': site['ssl']['subject'], 'issuer': site['ssl']['issuer']} # 安全访问字典键,使用get方法提供默认值 project_type = site.get('project_type', '未知类型') tb.add_row( [site['name'], project_type, site.get('ps', '无备注'), sslinfo['subject'], sslinfo['notAfter'], sslinfo['endtime'], sslinfo['issuer'], site_status]) print(tb) return res['data'] # 设置站点SSL证书 def SetSSL(self, site_name: str, ssl_cert_content: str, ssl_key_content: str): ''' 设置站点SSL证书 :param site_name: 站点名称(域名) :param ssl_cert_content: ssl证书内容 :param ssl_key_content: ssl私钥内容 :return: 设置结果 ''' print('\n### 设置站点SSL证书...') tk = self.__GetToken() # 获取签名 playload = { 'request_time': tk['request_time'], 'request_token': tk['request_token'], 'type': 0, 'siteName': site_name, 'key': ssl_key_content, 'csr': ssl_cert_content } res = self.__REQ.post(url=self.__BTURL + '/site?action=SetSSL', data=playload).json() # 判断请求是否成功 if 'status' in res and 'msg' in res and not res['status']: print('>>> 设置站点SSL证书失败:', res['msg']) return False print('>>>', res['msg']) # 输出结果 return res['status'] # 获取证书夹列表 def GetCertList(self, showlog=True): if showlog: print('\n### 获取证书夹列表...') tk = self.__GetToken() # 获取签名 playload = { 'request_time': tk['request_time'], 'request_token': tk['request_token'], 'force_refresh': 1 # 0:获取本地证书 1:获取云端证书 } print("请求参数:", playload) # 打印请求参数用于调试 res = self.__REQ.post(url=self.__BTURL + '/ssl?action=getcertlist', data=playload) print("响应内容:", res.text) # 打印响应内容用于调试 if res.status_code == 200: data = res.json() if 'status' in data and 'msg' in data and not data['status']: print('>>> 获取证书夹列表失败:', data['msg']) return False # 使用prettytable输出证书夹列表 if showlog and 'data' in data: tb = prettytable.PrettyTable() tb.field_names = ['域名', 'SSL到期时间', 'SSL剩余天数', '证书品牌', '可选域名'] tb.align['域名'] = 'l' tb.align['证书品牌'] = 'l' tb.align['可选域名'] = 'l' for cert in data['data']: tb.add_row([cert['subject'], cert['info']['notAfter'], cert['endtime'], cert['info']['issuer'], cert['dns']]) print(tb) return data else: print('>>> API请求失败,状态码:', res.status_code) return False # 删除过期SSL证书 def DelExpiredSSL(self): ''' 删除过期SSL证书 :showlog: 是否输出结果 :return: 删除结果 ''' print('\n### 删除过期SSL证书...') certs = self.GetCertList(showlog=False) # 获取证书列表 if not certs: return False expiredcerts = [] # 过期证书列表 for cert in certs: if cert['endtime'] < 0: # 证书已过期 expiredcerts.append(cert['subject']) # 加入过期证书列表 tk = self.__GetToken() # 获取签名 playload = { 'request_time': tk['request_time'], 'request_token': tk['request_token'], 'local': 1, 'ssl_hash': cert['hash'] } res = self.__REQ.post(url=self.__BTURL + '/ssl?action=remove_cloud_cert', data=playload).json() # 判断请求是否成功 if 'status' in res and 'msg' in res and not res['status']: print('>>> 删除过期SSL证书失败:', res['msg']) return False print('>>> 过期证书', cert['subject'], res['msg']) return res['status'] if len(expiredcerts) == 0: print('>>> 证书夹内未发现过期证书') return expiredcerts # 重启Nginx def RestartNginx(self): ''' 重启Nginx :return: 重启结果 ''' tk = self.__GetToken() # 获取签名 playload = { 'request_time': tk['request_time'], 'request_token': tk['request_token'], 'name': 'nginx', 'type': 'restart' } res = self.__REQ.post(url=self.__BTURL + '/system?action=ServiceAdmin', data=playload).json() # 判断请求是否成功 if 'status' in res and 'msg' in res and not res['status']: print('>>> 重启Nginx失败:', res['msg']) return False return res.json()['status'] # 获取系统基本信息 def GetSystemInfo(self, showlog=True): ''' 获取系统基本信息 :showlog: 是否输出结果 :return: 系统基本信息 ''' if showlog: print('\n### 获取系统基本信息...') tk = self.__GetToken() # 获取签名 playload = { 'request_time': tk['request_time'], 'request_token': tk['request_token'] } res = self.__REQ.post(url=self.__BTURL + '/system?action=GetSystemTotal', data=playload).json() # 判断请求是否成功 # 判断res是否存在status字段,若不存在则说明请求失败 if 'status' in res and 'msg' in res and not res['status']: print('>>> 获取系统基本信息失败:', res['msg']) return False res['memUtilization'] = round(res['memRealUsed'] / res['memTotal'], 2) * 100 # 内存使用率 if showlog: print('>>> 面板地址:', self.__BTURL) print('>>> 操作系统:', res['system']) print('>>> 面板版本:', res['version']) print('>>> 运行时间:', res['time']) print('>>> CPU使用率:', res['cpuRealUsed'], '%') print('>>> 内存使用率:', res['memUtilization'], '%') print('>>> 内存总量:', round(res['memTotal'] / 1024, 2), 'GB') return res if __name__ == '__main__': bt = BtPanel('http://xxxx:xxx', 'xxxxx') bt.GetSystemInfo() bt.GetSites() |