DEVOPS04 - 郵件和JSON、request模組、zabbix程式設計
一、郵件和JSON
1.1 郵件程式設計
1.1.1 SMTP概述
1. SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,使用TCP協議25埠
2. 這種協議用來控制信件的中轉方式
3. python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝
1.1.2 SMTP物件
1. Python傳送郵件,第一步是建立SMTP物件
import smtplib
smtp_obj = smtplib.SMTP( [host [, port [, local_hostname]]] )
2. 建立SMTP物件也可以不給定引數,之後再通過物件的其他方法進行繫結
1.1.3 設定郵件
1. 標準郵件需要三個頭部資訊
– From:發件人
– To:收件人
– Subject:主題
msg['From']=Header('root','utf8')
msg['To']=Header('zhangsan','utf8')
msg['Subject']=Header('py email test','utf8')
1.1.4 sendmail方法
1. Python SMTP 物件使用 sendmail 方法傳送郵件
SMTP.sendmail(from_addr, to_addrs, msg[, mail_opPons, rcpt_opPons])
2. sendmail方法三個必須的引數有:
– 收件人
– 發件人
– 訊息主體msg是一個字串,表示郵件
3.將準備好的郵件傳送
sender='root' receivers=['zhangsan','root'] smtp_obj=smtplib.SMTP('localhost') smtp_obj.sendmail(sender,receivers,msg.as_string())
1.1.5 通過本機發送郵件
1. 建立bob和alice帳戶
2. 編寫傳送郵件件程式,發件人為root,收件人是本機的bob和alice帳戶。【前提是本機搭建了postfix服務】
import smtplib
from email.mime.text import MIMEText
from email.header import Header
msg=MIMEText('Python傳送郵件測試\n','plain','utf8')
msg['From']=Header('root','utf8')
msg['To']=Header('zhangsan','utf8')
msg['Subject']=Header('py email test','utf8')
sender='root'
receivers=['zhangsan','alice']
smtp_obj=smtplib.SMTP('localhost')
smtp_obj.sendmail(sender,receivers,msg.as_string())
1.1.6 SMTP認證
1. 如果本機沒有SMTP功能,也可以使用第三方的郵件伺服器
2. 第三方郵件伺服器往往需要認證
1.1.7 通過網際網路伺服器傳送郵件
1. 通過自己網際網路註冊的郵箱,為女票郵箱發郵件
import smtplib #相當於郵件客戶端
from email.mime.text import MIMEText
from email.header import Header
import getpass
def send_mail(server,sender,passwd,receivers,msg):
smtp_obj = smtplib.SMTP()
smtp_obj.connect(server,25)
smtp_obj.login(sender,passwd)
smtp_obj.sendmail(sender,receivers,msg.as_string())
msg=MIMEText('Python傳送郵件測試\n','plain','utf8')
msg['From']='[email protected]'
msg['To']='[email protected]'
msg['Subject']=Header('py email test','utf8')
sender='[email protected]'
receivers=['[email protected]']
password=getpass.getpass()
send_mail('smtp.163.com',sender,password,receivers,msg)
1.2 JSON
1.2.1 JSON概述
1. JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式
2.易於人閱讀和編寫,同時也易於機器解析和生成
1.2.2 dumps方法
1. 使用json.dumps()方法對簡單資料型別進行編碼,使簡單資料型別程式設計JSON格式
>>> import json
>>> json.dumps(100)
'100'
>>> json.dumps([1, 2, 3])
'[1, 2, 3]'
>>> json.dumps({'name': 'zzg'})
'{"name": "zzg"}'
1.2.3 loads方法
1.使用json.loads()物件對JSON物件進行解碼,得到原始資料。
>>> import json
>>> number = json.dumps(100)
>>> json.loads(number)
100
1.2.4 天氣預報查詢
– 實況天氣獲取:http://www.weather.com.cn/data/sk/城市程式碼.html
– 城市資訊獲取:http://www.weather.com.cn/data/cityinfo/城市程式碼.html
– 詳細指數獲取:http://www.weather.com.cn/data/zs/城市程式碼.html
1. 執行程式時,螢幕將出現你所在城市各區縣名字
2. 使用者指定查詢某區縣,螢幕上將出現該區縣當前的氣溫、溼度、風向、風速等
import json
from urllib import request
html=request.urlopen('http://www.weather.com.cn/data/sk/101240508.html')
data=html.read()
data=json.loads(data)
print("%s %s" % (data.get('weatherinfo').get('city'),data.get('weatherinfo').get('temp')))
html = request.urlopen('http://www.weather.com.cn/data/cityinfo/101010100.html')
data = html.read()
print(json.loads(data))
二、requests模組
2.1 requests基礎
2.1.1 requests簡介
1. Requests是用Python語言編寫的、優雅而簡單的HTTP庫
2. Requests內部採用來urillib3
3. Requests使用起來肯定會比urillib3更簡單便捷
4. Requests需要單獨安裝
2.1.2 GET和POST
1. 通過requests傳送一個GET請求,需要在URL裡請求
的引數可通過params傳遞
r = requests.get(url="", params={}, headers={}, cookies={})
2. 與GET不同的是,POST請求新增了一個可選引數
data,需要通過POST請求傳遞的body裡的資料可以
通過data傳遞
r = requests.post(url="", data ={}, params={}, file={}, headers={}, cookies={})
2.1.3 請求引數
1.當訪問一個URL時,我們經常需要傳送一些查詢的欄位作為過濾條件
2.當利用python的requests去傳送一個需要包含這些引數鍵值對時,可以將它們傳給params
import requests
mapResult=requests.get('http://www.baidu.com/s',params={'wd':'中國地圖'})
with open('/tmp/baiduMap.html','wb') as fobj:
fobj.write(mapResult.content)
2.1.4 設定頭部
1. 使用者也可以自己設定請求頭,模擬自己是firefox瀏覽器
import requests
header={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'}
mapResult=requests.get('http://127.0.0.1/',headers=header)
print(mapResult.status_code)
2.2 requests應用
2.2.1 響應內容
1. 讀取伺服器響應的內容
# pip3 install requests
>>> import requests
>>> r = requests.get('http://www.baidu.com/')
>>> r.text 返回網頁的字串,因為編碼問題,中文可能是亂碼
>>> r.encoding # Request預設是ISO-8859-1
>>> r.encoding = 'utf8' #修改預設編碼是utf8
>>> r.text
>>> data = r.content # 返回網頁的bytes型別
>>> type(data)
2.2.2 其他響應內容格式
1. 用位元組的方式訪問請求響應體,尤其是非文字請求(如圖片)
>>> r2 = requests.get('http://www.weather.com.cn/m/i/legend.jpg')
>>> with open('/tmp/tq.jpg', 'wb') as fobj:
... fobj.write(r2.content)
2.Requests 中還有一個內建的 JSON 解碼器,助你處理 JSON 資料
>>> r1 = requests.get('http://www.weather.com.cn/data/sk/101010100.html')
>>> r1.encoding = 'utf8'
>>> r1.json() # 對json格式資料進行解碼
2.2.3 響應狀態碼
1. 檢測響應狀態碼
>>> r4.status_code
2.用python程式碼標識狀態碼
>>> requests.codes.not_found # requests模組將狀態碼都起了一個有意義的名字
>>> requests.codes.forbidden
>>> requests.codes.ok
三、Zabbix程式設計
https://www.zabbix.com/documentation/current/manual/api