宝塔面板的api说明手册及简单使用

几年前建站还是有点门槛的,自从各种一键安装web环境,web面板出现后,整个建站行业受到了9999点暴击。最好用的应该就是宝塔面板了,从它发布开始,就受到不少人的追捧。宝塔面板是使用浏览器来进行管理的,那么也就是说它是和网页一样的操作方式来管理服务器。最近宝塔官方发布了部分api,供大家自定义管理面板,这些api通过浏览器进行抓包就能抓到,下面我们一起来看看这些api怎么使用。

宝塔面板的api说明手册及简单使用

宝塔面板的api说明手册及简单使用

宝塔api说明手册pdf地址:https://www.bt.cn/api-doc.pdf

首先是签名算法,每次请求必须有由签名算法计算出的签名服务器才会响应。

  • api_sk = 接口密钥 (在面板设置页面 – API 接口中获取)
  • request_time = 当前请求时间的 uinx 时间戳 ( php: time() / python: time.time() )
  • request_token = md5(string(request_time) + md5(api_sk))
    PHP 示例:

     $request_token = md5($request_time . ‘’ . md5($api_sk))

参数说明

  • request_time 当前 uinx 时间戳 [必传]
  • request_token md5(string(request_time) + md5(api_sk)) [必传]
  • 其它参数 功能接口需要的其它参数 [可选]

注意事项:

  1. 请统一使用 POST 方式请求 API 接口
  2. 为了确保请求效率,请保存 cookie,并在每次请求时附上 cookie
  3. 为了面板安全考虑,请务必添加 IP 白名单
  4. 所有响应内容统一为 Json 数据格式

官方示例

<?php 
/** 
* 宝塔API接口示例Demo * 仅供参考,请根据实际项目需求开发,并做好安全处理 * date 2018/12/12 * author 阿良 */ 
class bt_api { 
        private $BT_KEY = "u6dS9qE1pyRZDnTpYrZiwaHqo5pSgXCO"; //接口密钥 
        private $BT_PANEL = "http://127.0.0.1:8888"; //面板地址 
       //如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入 
    public function __construct($bt_panel = null,$bt_key = null){ 
                if($bt_panel) $this->BT_PANEL = $bt_panel;
		if($bt_key) $this->BT_KEY = $bt_key;
	}
	
  	//示例取面板日志	
	public function GetLogs(){
		//拼接URL地址
		$url = $this->BT_PANEL.'/data?action=getData';
		
		//准备POST数据
		$p_data = $this->GetKeyData();		//取签名
		$p_data['table'] = 'logs';
		$p_data['limit'] = 10;
		$p_data['tojs'] = 'test';
		
		//请求面板接口
		$result = $this->HttpPostCookie($url,$p_data);
		
		//解析JSON数据
		$data = json_decode($result,true);
      	return $data;
	}
	
	
  	/**
     * 构造带有签名的关联数组
     */
  	private function GetKeyData(){
  		$now_time = time();
    	$p_data = array(
			'request_token'	=>	md5($now_time.''.md5($this->BT_KEY)),
			'request_time'	=>	$now_time
		);
    	return $p_data;    
    }
  	
  
  	/**
     * 发起POST请求
     * @param String $url 目标网填,带http://
     * @param Array|String $data 欲提交的数据
     * @return string
     */
    private function HttpPostCookie($url, $data,$timeout = 60)
    {
    	//定义cookie保存位置
        $cookie_file='./'.md5($this->BT_PANEL).'.cookie';
        if(!file_exists($cookie_file)){
            $fp = fopen($cookie_file,'w+');
            fclose($fp);
        }
		
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
}

//实例化对象
$api = new bt_api();
//获取面板日志
$r_data = $api->GetLogs();
//输出JSON数据到浏览器
echo json_encode($r_data);
?>

返回的数据都是json类型,目前宝塔提供的api不够全面,比如我要通过指定字段搜索网站,宝塔只提供了一个模糊搜索的接口,不好用,需要自己构造排除数据,浪费时间性能。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/242405.html

(0)
上一篇 2022年4月7日 17:44
下一篇 2022年4月7日 17:48

相关推荐

发表回复

登录后才能评论