> 技术文档 > 服务器宝塔面板的API调试,超详细,亲测可用!_宝塔api

服务器宝塔面板的API调试,超详细,亲测可用!_宝塔api

小编最近在强化开发安全的处理,除了软件的内置安全防护以外,外置的安全也是必不可少的。小编的服务器使用的是宝塔面板,所以在宝塔面板上做一下操作,本文章以宝塔面板==>安全==>IP规则为例,详细介绍了宝塔面板API的使用。

一、开启宝塔面板的API接口调用。

想要以API的形式对宝塔面板进行调试,必须先开启面板的API接口,并配置。

一定要配置好宝塔面板API接口的白名单,不然是调用不了宝塔的API接口的。复制接口秘钥并保存,在调用接口的时候会用到。

a.IP白名单放置的是公网IP,电脑的公网IP可以通过百度搜索IP地址就可以查询到本机的公网IP。

b.下面的接口文档地址,里面记录了一些常用开发语言的demo。https://www.bt.cn/bbs/thread-20376-1-1.html 

小编是Java开发者,所以也是借鉴了Java-Demo。

二、获取宝塔面板需要的功能接口以及参数。

想要通过API的形式来操作宝塔面板,必须要知道需要控制宝塔功能的接口,这里以上述提到的IP规则接口为例,切换到IP规则菜单,在浏览器中按F12,打开控制台,进入网络选项,就可以看到宝塔的接口地址了,点击网络中的链接,就能看到接口功能所需要的参数。

 

在上面可以看到,宝塔面板的接口都是post请求,并且传参是以form表单的形式进行传递的。

三、开始编写Java代码并且测试发起请求。

 public void baota() throws Exception { //将此ip添加到服务器的防火墙 String url=\"http://宝塔IP:宝塔端口号\"; String action=\"/firewall/com/set_ip_rule\"; String btSign = \"pJ7gDZ***********Fbf0m\"; String timestamp = (new Date().getTime()+\"\"); String md5Sign = getMd5(btSign); String temp = timestamp+md5Sign; String token = getMd5(temp); String cookie = \"request_time=\"+timestamp+\"&request_token=\"+token; String ipaddform=\"types=drop&brief=&chain=INPUT&family=ipv4&zone=public&operation=add&strategy=drop&address=\"; String json = cookie+\"&\"+ipaddform+\"192.168.2.15\"; url=url+action; //组装请求头 Map header_map=new HashMap(); header_map.put(\"accept\",\"text/xml,text/javascript,text/html,application/json\"); header_map.put(\"connection\",\"Keep-Alive\"); try { String body= HttpRequestUtil.form_send_wjwjy(url,\"post\",header_map,null,json); System.out.println(body); Map baotaresult_map= StringMapUtil.stringToMapObject(body); String msg=StringEncryptUtil.unicodeToChinese(baotaresult_map.get(\"msg\")+\"\"); System.out.println(\"{status:\"+baotaresult_map.get(\"status\")+\",msg:\"+msg+\"}\"); }catch (Exception e){ log.info(\"请求出现异常:\"+e.getMessage()); } } public static String getMd5(String str) throws Exception { try { // 生成一个MD5加密计算摘要 MessageDigest md = MessageDigest.getInstance(\"MD5\"); // 计算md5函数 md.update(str.getBytes()); // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 return new BigInteger(1, md.digest()).toString(16); } catch (Exception e) { throw new Exception(\"MD5加密出现错误,\"+e.toString()); } }

由于接口自然返回的会是一些编码,所以需要做一下转换。

public static String unicodeToChinese(String unicode) {// 定义一个正则表达式匹配Unicode编码,但不包括开头的反斜杠Pattern pattern = Pattern.compile(\"(?<!\\\\\\\\)\\\\\\\\u(\\\\p{XDigit}{4})\");Matcher matcher = pattern.matcher(unicode);StringBuffer stringBuffer = new StringBuffer();while (matcher.find()) {// 将匹配到的Unicode编码转换为字符,并替换到StringBuffer中matcher.appendReplacement(stringBuffer,Character.toString((char)Integer.parseInt(matcher.group(1), 16)));}matcher.appendTail(stringBuffer); // 将剩余部分追加到StringBuffer中return stringBuffer.toString(); // 返回转换后的字符串}

暂时调试结果:

以上就是通过API的形式操作服务器宝塔面板的案例全部了,这里是以添加IP规则为例,如果需要删除规则或者其他功能的,流程和展示的代码是一样的。再给大家说一个细节,服务器如果安装了宝塔面板,宝塔面板设置的IP限制规则优先级要高于服务器本身,所以有宝塔面板直接操作宝塔面板就可以了,没有的操作服务器本身的安全控制。

以上为小编自行编写,如有不足之处,欢迎留言讨论。