安装需要的模块
当前环境为:python2
如果需要使用python3,只需将相关urllib和urllib2使用的库全部改成urllib
参照上面的python2与python3urllib对照表
创建一个IBM_status.py文件
#!/usr/bin/env python
#coding:utf8
#++++++++++++description++++++++++++#
"""
@python2.7.5
@author:ying
@contact:1074020480@qq.com
@site:
@software: PyCharm
@file: IBM_status.py
@time: 2019/9/17 上午8:44
"""
#python3 使用的库写法
#import urllib.request
#import urllib.parse
#import http.cookiejar
#import ssl, json,threading
#+++++++++++++++++++++++++++++++++++#
import urllib2,urllib
import http.cookiejar
import ssl, json
class IBM_IMM(object):
def __init__(self, ip_list):
self.ip_list=ip_list
def get_status(self,ip):
# 跳过ssl验证
ssl._create_default_https_context = ssl._create_unverified_context
# 实例化cookie
cj = http.cookiejar.CookieJar()
# 保存cookie
handler = urllib2.HTTPCookieProcessor(cj)
# 打开网页方式
opener = urllib2.build_opener(handler)
# url
url = 'https://{0}/data/login'.format(ip)
# 请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
'Referer': 'https://{0}/designs/imm/index.php'.format(ip)
}
# 表单数据,IBM服务器IMM管理口默认用户名密码
formdata = {
'user': 'USERID',
'password': 'PASSW0RD',
'SessionTimeout': '1200',
}
formdata = urllib.urlencode(formdata).encode()
request = urllib2.Request(url=url, headers=headers)
response = opener.open(request, data=formdata)
# 登录成功后返回的数据内容{}
token = json.loads(response.read())
# 第二次请求的头信息,token非常重要,而且每次登录都会变化
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://{0}/designs/imm/index-console.php'.format(ip),
token['token2_name']: token['token2_value']
}
# 新url
geturl = 'https://{0}/designs/imm/dataproviders/imm_status_hardware.php'.format(ip)
new_request = urllib2.Request(url=geturl, headers=headers)
response = opener.open(new_request)
res=response.read().decode()
#格式化数据
js=json.loads(res)
js[ip]=js.pop('items')
return js
def return_res(self):
#数据再加工
list1 = []
for ip in self.ip_list:
res = self.get_status(ip=ip)
list1.append(res)
dict1 = {}
for i in list1:
dict2 = {}
for j, k in i.items():
for l in k[0]['hardware_health']:
name = l['type']
status = l['status']
dict2[name] = status
dict1[j] = dict2
#返回一个字典
return dict1
运行该文件(参考)
ip_list = ['192.168.127.72','192.168.127.71']#IMM接口的IP
imm=IBM_IMM(ip_list=ip_list)
res_list=imm.return_res()
print(res_list)
#------------------------------------------------#
#字典样式如下:
ll={
'192.168.127.71': {
u'Processors': u'Normal',
u'Disks': u'Normal',
u'System': u'Warning',
u'Memory': u'Normal',
u'PowerModules': u'Normal',
u'CoolingDevices': u'Normal',
u'Adapters': u'Normal'
},
'192.168.127.72': {
u'Processors': u'Normal',
u'Disks': u'Normal',
u'System': u'Warning',
u'Memory': u'Normal',
u'PowerModules': u'Normal',
u'CoolingDevices': u'Normal',
u'Adapters': u'Normal'
}
}
for i,j in ll.items():
# print i,j
for k,l in j.items():
print i,'---->',k,l
#!/usr/bin/env python
#coding:utf8
#++++++++++++description++++++++++++#
"""
@python2.7.5
@author:ying
@contact:1074020480@qq.com
@site:
@software: PyCharm
@file: IBM_status.py
@time: 2019/9/17 上午8:44
"""
#python3 使用的库写法
#import urllib.request
#import urllib.parse
#import http.cookiejar
#import ssl, json,threading
#+++++++++++++++++++++++++++++++++++#
import urllib2,urllib
import http.cookiejar
import ssl, json
class IBM_IMM(object):
def __init__(self, ip_list):
self.ip_list=ip_list
def get_status(self,ip):
# 跳过ssl验证
ssl._create_default_https_context = ssl._create_unverified_context
# 实例化cookie
cj = http.cookiejar.CookieJar()
# 保存cookie
handler = urllib2.HTTPCookieProcessor(cj)
# 打开网页方式
opener = urllib2.build_opener(handler)
# url
url = 'https://{0}/data/login'.format(ip)
# 请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
'Referer': 'https://{0}/designs/imm/index.php'.format(ip)
}
# 表单数据,IBM服务器IMM管理口默认用户名密码
formdata = {
'user': 'USERID',
'password': 'PASSW0RD',
'SessionTimeout': '1200',
}
formdata = urllib.urlencode(formdata).encode()
request = urllib2.Request(url=url, headers=headers)
response = opener.open(request, data=formdata)
# 登录成功后返回的数据内容{}
token = json.loads(response.read())
# 第二次请求的头信息,token非常重要,而且每次登录都会变化
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://{0}/designs/imm/index-console.php'.format(ip),
token['token2_name']: token['token2_value']
}
# 新url
geturl = 'https://{0}/designs/imm/dataproviders/imm_status_hardware.php'.format(ip)
new_request = urllib2.Request(url=geturl, headers=headers)
response = opener.open(new_request)
res=response.read().decode()
#格式化数据
js=json.loads(res)
js[ip]=js.pop('items')
return js
def return_res(self):
#数据再加工
list1 = []
for ip in self.ip_list:
res = self.get_status(ip=ip)
list1.append(res)
dict1 = {}
for i in list1:
dict2 = {}
for j, k in i.items():
for l in k[0]['hardware_health']:
name = l['type']
status = l['status']
dict2[name] = status
dict1[j] = dict2
#返回一个字典
return dict1
ip_list = ['192.168.127.72','192.168.127.71']#IMM接口的IP
imm=IBM_IMM(ip_list=ip_list)
res_list=imm.return_res()
print(res_list)
#------------------------------------------------#
#字典样式如下:
ll={
'192.168.127.71': {
u'Processors': u'Normal',
u'Disks': u'Normal',
u'System': u'Warning',
u'Memory': u'Normal',
u'PowerModules': u'Normal',
u'CoolingDevices': u'Normal',
u'Adapters': u'Normal'
},
'192.168.127.72': {
u'Processors': u'Normal',
u'Disks': u'Normal',
u'System': u'Warning',
u'Memory': u'Normal',
u'PowerModules': u'Normal',
u'CoolingDevices': u'Normal',
u'Adapters': u'Normal'
}
}
for i,j in ll.items():
# print i,j
for k,l in j.items():
print i,'---->',k,l