宝塔双11,一年就这一次,错过再等一年,最高立减5000元查看
当前位置:论坛首页 > 第三方应用 > Linux面板插件

API接口使用教程

置顶 精华 发表在 第三方应用2018-12-12 11:48   [复制链接] 85 175034

通过宝塔API,可以完全控制宝塔Linux面板的所有功能,包括第三方插件应用功能,事实上,在用户登录面板后使用的所有功能也是通过相同的接口对接的,这意味着,如果你熟悉使用浏览器调试器,就可以轻松对照宝塔Linux面板的操作参数完成一个第三方的前端对接。



API文档(未写完):https://www.bt.cn/api-doc.pdf
PHP-Demo:  https://www.bt.cn/api_demo_php.zip
Python-Demo:  https://www.bt.cn/api_demo_python.zip
Java-Demo: Demo.java (3.52 KB, 下载次数: 3428)
使用道具 举报 只看该作者 回复
发表于 2019-9-10 16:57:53 | 显示全部楼层
windows什么时候能提供啊

易木资源:https://www.emapp.cn/ 各类课程、引流课程、短视频课程等等  发表于 2020-4-28 12:23
阿里云服务器1折秒杀:http://t.cn/A6PsKF2d  发表于 2020-2-9 15:46
使用道具 举报 回复 支持 2 反对 0
发表于 2018-12-16 00:24:05 | 显示全部楼层
看来有望卖虚拟主机了
使用道具 举报 回复 支持 1 反对 0
发表于 前天 15:54 | 显示全部楼层
mingxue 发表于 2018-12-12 14:16
啤酒饮料矿泉水啦,来大哥腿收一收

好可爱的妹子.
使用道具 举报 回复 支持 反对
发表于 2020-10-13 18:12:12 | 显示全部楼层
alanstars 发表于 2020-10-13 18:06
您好,调用接口提示{"status": false, "msg": "指定参数无效!"}
请求的接口是/data?action=GetSystemTotal
...

唉,失误了,URL写错了
使用道具 举报 回复 支持 反对
发表于 2020-10-13 18:06:18 | 显示全部楼层
您好,调用接口提示{"status": false, "msg": "指定参数无效!"}
请求的接口是/data?action=GetSystemTotal
这个都没有入参,怎么会提示指定参数无效呢,其中request_token和request_time绝对没有错
使用道具 举报 回复 支持 反对
发表于 2020-9-28 14:04:42 | 显示全部楼层
CNAME解析后,进行网站子目录绑定。绑定成功后只返回{"status": true, "msg": "\u6dfb\u52a0\u6210\u529f"}这个。可是不返回id,怎么进行后面的删除呢??或者怎么获取添加的这个子目录绑定网站的id呢??
使用道具 举报 回复 支持 反对
发表于 2020-9-10 12:24:19 | 显示全部楼层
删除域名老是提示请选择域名是什么情况
使用道具 举报 回复 支持 反对
发表于 2020-8-7 15:26:21 | 显示全部楼层
宝塔用户_cetjla 发表于 2020-4-11 11:35
有个问题,请教下各位大神,我在用python去添加网站的时候总是报500错误,其他像获取系统信息,获取LOG日志 ...

addsite中数据提交格式:
    def addsite(self):
         # 拼接URL地址
        url = self.__BT_PANEL + '/site?action=AddSite'

         # 准备POST数据
        p_data = self.__get_key_data()  # 取签名
        # p_data['tojs'] = 'test'
         # p_data={}
         p_data['webname'] = json.dumps({'domain': '', 'domainlist': [''], 'count': 0})  
         p_data['path'] = '/www/wwwroot/abc.com'
         p_data['type_id'] = '0'
         p_data['type'] = 'PHP'
         p_data['version'] = '00'
         p_data['port'] = '80'
         p_data['ps'] = 'test'
         p_data['ftp'] = "False"
         p_data['ftp_username'] = 'testtest'
         p_data['ftp_password'] = 'testtest'
         p_data['sql'] = "FALSE"
         p_data['codeing'] = 'utf8'
         p_data['datauser'] = 'testtest'
         p_data['datapassword'] = 'testtesttesttest'
         # 请求面板接口
        result = self.__http_post_cookie(url, p_data)

         # 解析JSON数据
        return json.loads(result)
使用道具 举报 回复 支持 反对
发表于 2020-8-7 14:40:37 | 显示全部楼层
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>Redirecting...</title>\n<h1>Redirecting...</h1>\n<p>You should be redirected automatically to target URL: <a href=\"/login\">/login</a>.  If not click the link.",
出现这种情况后我的原因是没有传递文档中签名算法的接口参数request_time和request_token,加上参数就好了;还有可能是因为没有在面板设置的APi接口中配置ip白名单。
使用道具 举报 回复 支持 反对
发表于 2020-6-30 15:19:39 | 显示全部楼层
计划任务什么时候有接口,接口文档都两年还没有出网页版吗
使用道具 举报 回复 支持 反对
发表于 2020-5-29 10:35:14 | 显示全部楼层
镖客若水 发表于 2019-9-10 16:57
windows什么时候能提供啊

本机测试,已经可以了使用这个API了
使用道具 举报 回复 支持 反对
发表于 2020-5-10 04:04:41 | 显示全部楼层
api的pdf文档加个目录,方便一眼能看到api都有哪些功能,也便于开发者一目了然的知道是否能实现自己的需求
使用道具 举报 回复 支持 反对
发表于 2020-5-1 21:34:11 | 显示全部楼层
反向代理考虑下啊,这样就可以拿宝塔做cdn了
使用道具 举报 回复 支持 反对
发表于 2020-4-28 11:06:41 | 显示全部楼层
楼主,我配置了api ip白名单还是返回IP校验失败,您的访问IP为....有可能是什么问题
使用道具 举报 回复 支持 反对
发表于 2020-4-25 17:37:18 | 显示全部楼层
IP校验失败,您的访问IP为
使用道具 举报 回复 支持 反对
发表于 2020-4-12 13:59:47 | 显示全部楼层
有安全里的屏蔽IP的接口吗?
使用道具 举报 回复 支持 反对
发表于 2020-4-11 11:35:54 | 显示全部楼层
有个问题,请教下各位大神,我在用python去添加网站的时候总是报500错误,其他像获取系统信息,获取LOG日志等都正常的。python文件如下,python本版:3.7.0
  1. #coding: utf-8
  2. # +-------------------------------------------------------------------
  3. # | 宝塔Linux面板
  4. # +-------------------------------------------------------------------
  5. # | Copyright (c) 2015-2099 宝塔软件() All rights reserved.
  6. # +-------------------------------------------------------------------
  7. # | Author: 黄文良 <2879625666@qq.com>
  8. # +-------------------------------------------------------------------

  9. #------------------------------
  10. # API-Demo of Python
  11. #------------------------------
  12. import time,hashlib,sys,os,json
  13. class bt_api:
  14.     __BT_KEY = '***'
  15.     __BT_PANEL = '***'

  16.     #如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入
  17.     def __init__(self,bt_panel = None,bt_key = None):
  18.         if bt_panel:
  19.             self.__BT_PANEL = bt_panel
  20.             self.__BT_KEY = bt_key


  21.     #取面板日志
  22.     def get_logs(self):
  23.         #拼接URL地址
  24.         url = self.__BT_PANEL + '/data?action=getData'

  25.         #准备POST数据
  26.         p_data = self.__get_key_data()  #取签名
  27.         p_data['table'] = 'logs'
  28.         p_data['limit'] = 10
  29.         p_data['tojs'] = 'test'

  30.         #请求面板接口
  31.         result = self.__http_post_cookie(url,p_data)

  32.         #解析JSON数据
  33.         return json.loads(result)

  34.     #取系统状态
  35.     def sysstatus(self):
  36.         #拼接URL地址
  37.         url = self.__BT_PANEL + '/system?action=GetSystemTotal'

  38.         #准备POST数据
  39.         p_data = self.__get_key_data()  #取签名
  40.         #请求面板接口
  41.         result = self.__http_post_cookie(url,p_data)

  42.         #解析JSON数据
  43.         return json.loads(result)
  44.     #获取磁盘信息
  45.     def diskinfo(self):
  46.         #拼接URL地址
  47.         url = self.__BT_PANEL + '/system?action=GetDiskInfo'

  48.         #准备POST数据
  49.         p_data = self.__get_key_data()  #取签名
  50.         #请求面板接口
  51.         result = self.__http_post_cookie(url,p_data)

  52.         #解析JSON数据
  53.         return json.loads(result)


  54.     def addsite(self):
  55.         #拼接URL地址
  56.         url = self.__BT_PANEL + '/site?action=AddSite'

  57.         #准备POST数据
  58.         p_data = self.__get_key_data()  #取签名
  59.         # p_data['tojs'] = 'test'
  60.         # p_data={}
  61.         p_data['webname'] = {"domain":'test.com',"domainlist":[],"count":0}
  62.         p_data['path'] = '/www/wwwroot/test.com'
  63.         p_data['type_id'] = 0
  64.         p_data['type'] = 'PHP'
  65.         p_data['version'] = 72
  66.         p_data['port'] = 80
  67.         p_data['ps'] = 'test'
  68.         p_data['ftp'] = False
  69.         p_data['ftp_username'] = 'testtest'
  70.         p_data['ftp_password'] = 'testtest'
  71.         p_data['sql'] = False
  72.         p_data['coding'] = 'utf8'
  73.         p_data['datauser'] = 'testtest'
  74.         p_data['datapassword'] = 'testtesttesttest'
  75.         #请求面板接口
  76.         result = self.__http_post_cookie(url,p_data)

  77.         #解析JSON数据
  78.         return json.loads(result)

  79.     #计算MD5
  80.     def __get_md5(self,s):
  81.         m = hashlib.md5()
  82.         m.update(s.encode('utf-8'))
  83.         return m.hexdigest()

  84.     #构造带有签名的关联数组
  85.     def __get_key_data(self):
  86.         now_time = int(time.time())
  87.         p_data = {
  88.                     'request_token':self.__get_md5(str(now_time) + '' + self.__get_md5(self.__BT_KEY)),
  89.                     'request_time':now_time
  90.                  }
  91.         return p_data


  92.     #发送POST请求并保存Cookie
  93.     #@url 被请求的URL地址(必需)
  94.     #@data POST参数,可以是字符串或字典(必需)
  95.     #@timeout 超时时间默认1800秒
  96.     #return string
  97.     def __http_post_cookie(self,url,p_data,timeout=18000):
  98.         cookie_file = './' + self.__get_md5(self.__BT_PANEL) + '.cookie'
  99.         with open(cookie_file,"a") as file:
  100.             file.write("# Netscape HTTP Cookie File\n")
  101.         if sys.version_info[0] == 2:
  102.             #Python2
  103.             import urllib,urllib2,ssl,cookielib

  104.             #创建cookie对象
  105.             cookie_obj = cookielib.MozillaCookieJar(cookie_file)

  106.             #加载已保存的cookie
  107.             if os.path.exists(cookie_file):cookie_obj.load(cookie_file,ignore_discard=True,ignore_expires=True)

  108.             ssl._create_default_https_context = ssl._create_unverified_context

  109.             data = urllib.urlencode(p_data)
  110.             req = urllib2.Request(url, data)
  111.             opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_obj))
  112.             response = opener.open(req,timeout=timeout)

  113.             #保存cookie
  114.             cookie_obj.save(ignore_discard=True, ignore_expires=True)
  115.             return response.read()
  116.         else:
  117.             #Python3
  118.             import urllib.request,ssl,http.cookiejar
  119.             cookie_obj = http.cookiejar.MozillaCookieJar(cookie_file)
  120.             if os.path.exists(cookie_file):
  121.                 cookie_obj.load(cookie_file,ignore_discard=True,ignore_expires=True)
  122.             # cookie_obj.load(cookie_file,ignore_discard=True,ignore_expires=True)
  123.             handler = urllib.request.HTTPCookieProcessor(cookie_obj)
  124.             data = urllib.parse.urlencode(p_data).encode('utf-8')
  125.             print(data)
  126.             req = urllib.request.Request(url, data)
  127.             opener = urllib.request.build_opener(handler)
  128.             response = opener.open(req,timeout = timeout)
  129.             cookie_obj.save(ignore_discard=True, ignore_expires=True)
  130.             result = response.read()
  131.             if type(result) == bytes: result = result.decode('utf-8')
  132.             return result


  133. if __name__ == '__main__':
  134.     #实例化宝塔API对象
  135.     my_api = bt_api()
  136.     domain = 'test.laojihost.com'
  137.     username = str(domain)[0-15]
  138.     # 调用get_logs方法
  139.     r_data = my_api.get_logs()
  140.     # r_sys = my_api.sysstatus()
  141.     # r_disk = my_api.diskinfo()
  142.     r_add_site = my_api.addsite()
  143.     #打印响应数据
  144.     print(r_data)
  145.     # print(r_sys)
  146.     # print(r_disk)
  147.     print(r_add_site)
复制代码


运行报错如下:
  1. Traceback (most recent call last):
  2.   File "demo.py", line 169, in <module>
  3.     r_add_site = my_api.addsite()
  4.   File "demo.py", line 91, in addsite
  5.     result = self.__http_post_cookie(url,p_data)
  6.   File "demo.py", line 136, in __http_post_cookie
  7.     response = opener.open(req,timeout=timeout)
  8.   File "/usr/lib64/python2.7/urllib2.py", line 437, in open
  9.     response = meth(req, response)
  10.   File "/usr/lib64/python2.7/urllib2.py", line 550, in http_response
  11.     'http', request, response, code, msg, hdrs)
  12.   File "/usr/lib64/python2.7/urllib2.py", line 475, in error
  13.     return self._call_chain(*args)
  14.   File "/usr/lib64/python2.7/urllib2.py", line 409, in _call_chain
  15.     result = func(*args)
  16.   File "/usr/lib64/python2.7/urllib2.py", line 558, in http_error_default
  17.     raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
  18. urllib2.HTTPError: HTTP Error 500: INTERNAL SERVER ERROR
复制代码
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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