python通過wifi發送數據?背景:對服務器手工上下電比較麻煩,需要登錄服務器的ILO口頁面,然後進行關機(如果直接掉電服務器的電源可能會影響到硬件以及軟件),下面的代碼通過調用服務器提供的接口信息自動實現對多個服務器實行上下電的操作需要提前将服務器的用戶名和密碼輸入到devicePower.csv文件中保存,我來為大家科普一下關于python通過wifi發送數據?以下内容希望對你有幫助!
背景:對服務器手工上下電比較麻煩,需要登錄服務器的ILO口頁面,然後進行關機(如果直接掉電服務器的電源可能會影響到硬件以及軟件),下面的代碼通過調用服務器提供的接口信息自動實現對多個服務器實行上下電的操作。需要提前将服務器的用戶名和密碼輸入到devicePower.csv文件中保存。
另外腳本涉及到多個模塊,需要在python中提前部署和安裝
## 實現在服務器ILO口頁面對服務器的電源進行各種操作,代碼接口依賴于不同服務器廠商,僅供參考
import requests
import urllib3
import json
import pandas as pd
import numpy as np
#腳本文件和excel表格放罝路徑,可以自己調整
workpath = "D:/"
#參數取值:On:上電:ForceOff:強制下電:Gracefulshutdown:正常關機:ForceRestart:強制重啟
powerParm ="On"
#通過ssl._create_unverified_context全局取消證書驗證
ssl._create_default_https_context = ssl._create unverified_context
#強制取消未經驗證的HTTPS url的警告信息
url1ib3.disable_warnings()
#輸入:csv格式,存放交換機的ip地址:用戶名和密碼,格式如下:
#deviceIP Username Password
#192.36.1.139 root adn123456
path = workpath '/devicePower.csv'
#以下步驟将excel文檔内容解析成列表的形式,便于後續的進一步解析
dataframe = pd.read_csv(path, encoding=" gb18030")
#将dataframe轉換成數組
data = np.array(dataframe)
#再将數組轉換成列表
data_list = data.tolist()
#公共部分
headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Mobile Safari/537.36",
"Accept-Encoding": "gzip, deflate, br",
"content-type": "application/json; charset=utf-8"
}
index = 0
for item in data_list:
#獲取設備工地址,登錄用戶名,密碼
host_ip = item[0]
username = item[1]
password= item[2]
#刨建會話的頁面
url_session = "https://" host_ip "/SessionService/Sessions"
#會話請求體
FormData = {'UserName': username, 'Password': password}
resp = "" #先定義變量,否則在下面try語句的except無法使用該變量
try:
resp = requests.post(url_session, data=json.dumps (FormData), headers=headers, verify=False)
except:
print("========== %d ================登錄服務器 %s 失敗" % (index, host_ip))
index = index 1
continue
if resp.status_code == 201:
print("========== %d ================登錄服務器 %s 成功" % (index, host_ip))
index = index 1
else:
print("========== %d ================服務器 %s 不支持,請升級HDM或者BIOS,返回碼:%s,返回錯誤信息:\n%s" % (index, host_ip, str(resp.status_code), resp.text))
index = index 1
continue
#獲取token值,用于後續的操作
token = resp.headers["X-Auth-Token"]
#服務器電源進行採作
url_power = "https://" host_ip "/Actions/1.Reset"
#利用上面步驟獲取到的token更新本次請求體的報文頭
headers.update({'X-Auth-Token': token})
request_body= json.dumps({"ResetType": powerParm})
resp_power = requests.post(url_power, data=request_body, headers=headers, verify=False)
if resp_power.status_code == 204 or resp_power.status_code == 200:
print("對當前服務器電源進行 %s 操作成功,返回碼:%s " % (powerParm, resp_power.status_code))
else:
print("登錄服務器 %s 失敗,返回碼:%s,返回錯誤信息:%s" % (host_ip, str(resp_power.status_code), resp_power.text))
print("========== 執行結束 ================ ")
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!