当前位置:论坛首页 > BUG提交 > Linux面板

【已解决】面板api接口提示:请使用正确的入口登录面板

发表在 BUG提交2022-10-10 11:29 [复制链接] 4 5430

本帖最后由 鲁凯啸 于 2022-10-11 10:41 编辑
已申请添加开发者群471729998,请通过。

使用模板:https://www.bt.cn/api_demo_php.zip

增加函数:
下载 (2).png
运行结果:
下载 (1).png

系统及面板版本信息:
0.jpg
使用道具 举报 只看该作者 回复
发表于 2022-10-10 11:42:14 | 显示全部楼层
本帖最后由 鲁凯啸 于 2022-10-10 16:10 编辑

补充:
命令
360截图20221010113738183.jpg


结果:日志能正常读出,转发则提示安全入口
360截图20221010114058895.jpg
使用道具 举报 回复 支持 反对
发表于 2022-10-10 17:56:12 | 显示全部楼层

  1. <?php
  2. /**
  3. * 宝塔API接口示例Demo
  4. * 仅供参考,请根据实际项目需求开发,并做好安全处理
  5. * date 2018/12/12
  6. * author 阿良
  7. */
  8. class bt_api {
  9.         private $BT_KEY = "T******************************h";  //接口密钥
  10.           private $BT_PANEL = "http://u.************.net:8888";           //面板地址
  11.        
  12.           //如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入
  13.         public function __construct($bt_panel = null,$bt_key = null){
  14.                 if($bt_panel) $this->BT_PANEL = $bt_panel;
  15.                 if($bt_key) $this->BT_KEY = $bt_key;
  16.         }
  17.        
  18.           //示例取面板日志       
  19.         public function GetLogs(){
  20.                 //拼接URL地址
  21.                 $url = $this->BT_PANEL.'/data?action=getData';
  22.                
  23.                 //准备POST数据
  24.                 $p_data = $this->GetKeyData();                //取签名
  25.                 $p_data['table'] = 'logs';
  26.                 $p_data['limit'] = 10;
  27.                 $p_data['tojs'] = 'test';
  28.                
  29.                 //请求面板接口
  30.                 $result = $this->HttpPostCookie($url,$p_data);
  31.                
  32.                 //解析JSON数据
  33.                 $data = json_decode($result,true);
  34.               return $data;
  35.         }
  36.        
  37.        
  38.           /**
  39.      * 构造带有签名的关联数组
  40.      */
  41.           private function GetKeyData(){
  42.                   $now_time = time();
  43.             $p_data = array(
  44.                         'request_token'        =>        md5($now_time.''.md5($this->BT_KEY)),
  45.                         'request_time'        =>        $now_time,
  46.                         //'panel_address'=>"lwsd.why.showcai.net",
  47.             //'panel_port'=>8888,
  48.                 );
  49.             return $p_data;   
  50.     }
  51.          
  52.   
  53.           /**
  54.      * 发起POST请求
  55.      * @param String $url 目标网填,带http://
  56.      * @param Array|String $data 欲提交的数据
  57.      * @return string
  58.      */
  59.     private function HttpPostCookie($url, $data,$timeout = 60)
  60.     {
  61.             //定义cookie保存位置
  62.         $cookie_file='./'.md5($this->BT_PANEL).'.cookie';
  63.         if(!file_exists($cookie_file)){
  64.             $fp = fopen($cookie_file,'w+');
  65.             fclose($fp);
  66.         }
  67.                
  68.         $ch = curl_init();
  69.         curl_setopt($ch, CURLOPT_URL, $url);
  70.         curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  71.         curl_setopt($ch, CURLOPT_POST, 1);
  72.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  73.         curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  74.         curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  75.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  76.         curl_setopt($ch, CURLOPT_HEADER, 0);
  77.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  78.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  79.         $output = curl_exec($ch);
  80.         curl_close($ch);
  81.         return $output;
  82.     }
  83.    
  84.    
  85.    
  86.    
  87.           // 安全 - 系统防火墙 - 端口转发       
  88.         public function forward($ip="",$type=0,$id=1){
  89.                 //拼接URL地址
  90.                 $url= "";
  91.                 $p_data = $this->GetKeyData();                //取签名
  92.                 if($ip==""){//没有ip便取列表
  93.                     $url= $this->BT_PANEL."/safe/firewall/get_forward_list";
  94.                     $p_data['p'] = '1';
  95.                 }else{//有ip便添加或修改
  96.                     $url = $this->BT_PANEL.'/safe/firewall/'.( $type? "create_forward":"modify_forward" );
  97.                     if($type!=1)                $p_data['id'] = $id;
  98.                     $p_data['protocol'] = "tcp/udp";
  99.                     $p_data['s_ports'] = '4431';
  100.                     $p_data['d_address'] = $ip;
  101.                     $p_data['d_ports'] = '80';
  102.                 }
  103.                
  104.                
  105.                 //请求面板接口
  106.                 $result = $this->HttpPostCookie($url,$p_data);
  107. echo "\r\n";
  108.                 var_dump($url);
  109. echo "\r\n";
  110.                 var_dump($p_data);
  111. echo "\r\n";
  112.                 var_dump($result);
  113. echo "\r\n";
  114.                 //解析JSON数据
  115.                 $data = json_decode($result,true);
  116.               return $data;
  117.         }
  118.        
  119. }



  120. //实例化对象
  121. $api = new bt_api();
  122. echo "<pre>\r\n";
  123. //获取面板日志
  124. //$r_data = $api->GetLogs();
  125. //输出JSON数据到浏览器
  126. //var_dump ($r_data);

  127. $r_data = $api->forward();//有返回结果,说明接口白名单及其他参数没问题。
  128. var_dump ($r_data) ;
  129. echo "\r\n\r\n";
  130. $r_data = $api->forward("127.0.0.2",0,4);//无返回结果且无更改,说明该接口有问题。安全 - 系统防火墙 - 端口转发        【ip,增/改,要改的序号】
  131. var_dump($r_data);

  132. echo "\r\n\r\n</pre>";
  133. ?>
复制代码



https://www.bt.cn/bbs/forum.php?mod=attachment&aid=MTI2MjQzfDY1MTYzOGFkZjk0MDY0MWQwNTJhZjg3MDU5ZTc1ODE2fDE3Mzc2NDI2MjM%3D&request=yes&_f=.zip
使用道具 举报 回复 支持 反对
发表于 2022-10-10 21:01:10 | 显示全部楼层
本帖最后由 鲁凯啸 于 2022-10-11 10:37 编辑

经过指导,已解决,是我自己的参数构造不正确导致的。post的参数我没有用data包裹,改造上述代码87-121行部分即可。
  1.    // 安全 - 系统防火墙 - 端口转发       
  2.         public function forward($ip="",$type=0,$id=1){
  3.                 //拼接URL地址
  4.                 $url= "";
  5.                 $p_data = $this->GetKeyData();                //取签名
  6.                 if($ip==""){//没有ip便取列表
  7.                     $url= $this->BT_PANEL."/safe/firewall/get_forward_list";
  8.                     //$p_data['p'] = '1';
  9.                 }else{//有ip便添加或修改
  10.                     $url = $this->BT_PANEL.'/safe/firewall/'.( $type? "create_forward":"modify_forward" );
  11.                     $d_data=[];
  12.                     if($type!=1)                $d_data['id'] = $id;
  13.                     $d_data['protocol'] = "tcp/udp";
  14.                     $d_data['s_ports'] = "4431";
  15.                     $d_data['d_address'] = $ip;
  16.                     $d_data['d_ports'] = "80";
  17.                     $p_data['data']=json_encode($d_data);
  18.                 }
  19.                
  20.                
  21.                 //请求面板接口
  22.                 $result = $this->HttpPostCookie($url,$p_data);
  23. echo "\r\n";
  24.                 var_dump($url);
  25. echo "\r\n";
  26.                 var_dump($p_data);
  27. echo "\r\n";
  28.                 var_dump($result);
  29. echo "\r\n";
  30.                 //解析JSON数据
  31.                 $data = json_decode($result,true);
  32.               return $data;
  33.         }
  34.        
  35. }
复制代码


使用道具 举报 回复 支持 反对
发表于 2023-1-14 15:05:58 | 显示全部楼层
宝塔给的demo并没有说把data包裹
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表