zabbix api

python 2.7

# -*- coding: utf-8 -*-

# @Time    : 2019-01-09 10:24
# @Author  : 小贰
# @FileName: zabbix_2_api.py
# @function: zabbix api for python 2.x

import json
import urllib2
from urllib2 import URLError
import sys, argparse


class zabbix_api:
    def __init__(self,url,user,passwd):
        self.url = url
        self.user = user
        self.passwd = passwd
        self.header = {"Content-Type": "application/json"}

    def user_login(self):
        data = json.dumps({
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {
                "user": self.user,  # 修改用户名
                "password": self.passwd  # 修改密码
            },
            "id": 0
        })
        request = urllib2.Request(self.url, data)
        for key in self.header:
            request.add_header(key, self.header[key])
        try:
            result = urllib2.urlopen(request)
        except URLError as e:
            print("33[041m 用户认证失败,请检查 !33[0m", e.code)
        else:
            response = json.loads(result.read())
            result.close()
            self.authID = response['result']
            return self.authID

    def main(self,method,params):
        data = json.dumps({
            "jsonrpc": "2.0",
            "method": method,
            "params": params,
            "auth": self.user_login(),
            "id": 1
        })
        request = urllib2.Request(self.url, data)
        for key in self.header:
            request.add_header(key, self.header[key])

        try:
            result = urllib2.urlopen(request)
        except URLError as e:
            if hasattr(e, 'reason'):
                print('We failed to reach a server.')
                print('Reason: ', e.reason)
            elif hasattr(e, 'code'):
                print('The server could not fulfill the request.')
                print('Error code: ', e.code)
        else:
            response = json.loads(result.read())
            # print response
            for host in response['result']:
                print ("HostID : %s	 HostName : %s	" % (host['hostid'], host['name']))
            result.close()
            # print "主机数量: 33[31m%s33[0m"%(len(response['result']))


if __name__ == "__main__":
    url = 'http://192.168.1.218/zabbix/api_jsonrpc.php'
    user = "admin"
    passwd = "zabbix"
    zabbix = zabbix_api(url,user,passwd)
    method = "host.get"
    params = {
        "output": ["hostid", "name"],
        "templateids": ["10105"]
    }
    zabbix.main(method,params)

python 3.6

# -*- coding: utf-8 -*-

# @Time    : 2019-01-09 10:24
# @Author  : 小贰
# @FileName: zabbix_2_api.py
# @function: zabbix api for python 3.x

import json
from urllib import request, parse


class zabbix_api:
    def __init__(self,url,user,passwd):
        self.url = url
        self.user = user
        self.passwd = passwd
        self.header = {"Content-Type": "application/json"}

    def user_login(self):
        data = {
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {
                "user": self.user,
                "password": self.passwd
            },
            "id": 0
        }
        # 由于API接收的是json字符串,故需要转化一下
        data = json.dumps(data).encode('utf-8')
        # 对请求进行包装
        req = request.Request(url, headers=self.header, data=data)
        try:
            # 打开包装过的url
            result = request.urlopen(req)
        except Exception as e:
            print("Auth Failed, Please Check Your Name And Password:", e)
        else:
            response = result.read()
            # 上面获取的是bytes类型数据,故需要decode转化成字符串
            page = response.decode('utf-8')
            # 将此json字符串转化为python字典
            page = json.loads(page)
            self.authID = page['result']
            result.close()
            return self.authID
    def main(self,method,params):
        data = {
            "jsonrpc": "2.0",
            "method": method,
            "params": params,
            "auth": self.user_login(),
            "id": 1
        }
        data = json.dumps(data).encode("utf-8")
        req = request.Request(url, headers=self.header, data=data)

        try:
            result = request.urlopen(req)
        except Exception as e:
            print('Error code: ', e)
        else:
            response = result.read()
            # 上面获取的是bytes类型数据,故需要decode转化成字符串
            page = response.decode('utf-8')
            # 将此json字符串转化为python字典
            page = json.loads(page)

            for host in page['result']:
                print ("HostID : %s	 HostName : %s	" % (host['hostid'], host['name']))
            result.close()
            # print "主机数量: 33[31m%s33[0m"%(len(response['result']))

if __name__ == "__main__":
    url = 'http://192.168.1.218/zabbix/api_jsonrpc.php'
    user = "admin"
    passwd = "zabbix"
    zabbix = zabbix_api(url, user, passwd)
    method = "host.get"
    params = {
        "output": ["hostid", "name"],
        "templateids": ["10105"]
    }
    zabbix.main(method, params)
原文地址:https://www.cnblogs.com/xiao2er/p/10243303.html