一、邮件和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