1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 import json
4 import urllib2
5 import sys
6 from urllib2 import Request , urlopen ,URLError,HTTPError
7 zabbix_url="http://112.x.x.x/zabbix/api_jsonrpc.php"
8 zabbix_header = {"Content-Type":"application/json"}
9 zabbix_user = "admin"
10 zabbix_pass = "admin"
11 zabbix_code = ""
12 #用户认证得到一个session (result对应的结果)和id
13 #下面生成一个json格式的数据
14 auth_data = json.dumps(
15 {"jsonrpc":"2.0",
16 "method":"user.login",
17 "params":
18 {
19 "user":zabbix_user,
20 "password":zabbix_pass
21
22 },
23 "id":0
24 })
25
26 request = urllib2.Request(zabbix_url,auth_data)
27 for key in zabbix_header:
28 request.add_header(key,zabbix_header[key])
29 #认证获取session 和id
30 try:
31 result = urllib2.urlopen(request)
32 except HTTPError,e:
33 print 'The server couldn\'t fulfill the request,Error code:',e.code
34 except URLError,e:
35 print 'we are faild search a server reason',e.reason
36 else:
37 #loads变成字典
38 response=json.loads(result.read())
39 #得到返回数据{u'jsonrpc': u'2.0', u'result': u'08af97bd25f6183d8d49d29f1121bd9b', u'id': 0}
40 result.close()
41 if 'result' in response:
42 auth_code=response['result']
43 else:
44 print response['error']['data']
45
46 json_data={
47 "method":"host.get", #方法
48 "params":{
49 "output":"extend",
50 }
51 }
52 json_base={
53 "jsonrpc":"2.0",
54 "auth":auth_code,
55 "id":1
56 }
57 json_data.update(json_base)
58 #得到如下
59 '''
60 json_data={
61 'jsonrpc': '2.0',
62 'params':
63 {
64 'output': 'extend'
65 },
66 'method': 'host.get', 'auth': '08af97bd25f6183d8d49d29f1121bd9b', 'id': 1}
67 '''
68 if len(auth_code) == 0:
69 sys.exit(1)
70 if len(auth_code) != 0:
71 get_host_data = json.dumps(json_data)
72 request = urllib2.Request(zabbix_url,get_host_data)
73 for key in zabbix_header:
74 request.add_header(key,zabbix_header[key])
75 try:
76 result = urllib2.urlopen(request)
77 except URLError as e:
78 if hasattr(e,'reason'):
79 print "we faild to reach a server."
80 print 'reason:',e.reason
81 elif hasattr(e,'code'):
82 print 'the server could no fulfill the request.'
83 print 'Error code:',e.code
84 else:
85 response=json.loads(result.read())
86 result.close()
87 print response
88 print "number of Hosts:",len(response['result'])