1. 程式人生 > >DEVOPS04 - 郵件和JSON、request模組、zabbix程式設計

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