知识点一、网络请求1.1基础的get请求和post请求处理方式--get请求方式
from urllib import request
from urllib import parse
import json
#get请求
url = 'http://*****'
data = {"stu_name":"xiaohei"}
tmpData = parse.urlencode(data)#将数据变成kv k= v
#接口+参数
tmpUrl= url + '?'+ tmpData
print(tmpUrl)
res = request.urlopen(tmpUrl)
resForRead = res.read()#bytes类型
resString = resForRead.decode()#转换成string类型
print(type(resString))
#想得到返回数据的任意的变量
resForDict = json.loads(resString)#将字符串转成字典
print(resForDict)
1.1基础的get请求和post请求处理方式--post请求方式
from urllib import request
from urllib import parse
import json
url = 'http://****'
data = {"username":'niuhanyang','passwd':'aA123456'}
tmpData = parse.urlencode(data)#将数据变成kv k= v
res = request.urlopen(url,tmpData.encode())# post 请求 参数1 为接口地址 参数2位参数要求bytes
resForRead = res.read()#bytes类型
resString = resForRead.decode()#转换成string类型
print(type(resString))
#想得到返回数据的任意的变量
resForDict = json.loads(resString)#将字符串转成字典
print(resForDict)# post 和 get的区别在与urlopen时,get发的是接口和参数的平成字符串
1.2 使用requests模块优化网络请求的代码
import requests
#get请求
url = 'http://****'
data = {"stu_name":"xiaohei"}
#res = requests.get(url,data).text#text 方法返回的是字符串格式的返回值
res = requests.get(url,data).json()#json 方法返回的是字典格式的返回值
print(res)
print(type(res))
#post 请求
import requests
url = 'http://****'
data = {"username":'niuhanyang','passwd':'aA123456'}
res = requests.post(url,data).text#text 方法返回的是字符串格式的返回值
#res = requests.post(url,data).json()#json 方法返回的是字典格式的返回值
print(res)
print(type(res))
# '''入参是json'''
import requests
url = 'http://****'
data = {"name":"xusu","grade":"一班","phone":18823452345}
res = requests.post(url,json = data ).json()
print(res)
'''COOKIEs'''
import requests
COOKIE = {"niuhanyang":"****"}#查看接口文档,哪个接口返回提供
url = 'http://*****'
data = {"stu_id":1,'gold':10000}
res = requests.post(url,data,COOKIEs = COOKIE).text
print(res)
#header
import requests
url = 'http://****'
header = {'Referer':'http://****/'}
res = requests.get(url,headers = header).text
print(res)
#传文件到服务器上
import requests
url ='http://****'
res = requests.post(url,files = {'file':open('test.py')}).text
print(res)
#小练习
# 提供一个方法 获取到登录后的sign
# 1、请求接口
# 2、获取返回值
# 3、解析取sign
import jsonpath
import requests
def getSign():
url = 'http://api.nnzhp.cn/api/user/login'
data = {"username":'niuhanyang','passwd':'aA123456'}
res = requests.post(url,data).json()
sign = res.get('login_info').get('sign')
print(sign)
Sign = jsonpath.jsonpath(res,'$..sign')#第一个参数访问的对象,第二个参数键值对的key 需要通过$..来定位,返回值是list,需要通过$.. 来定位 如果有目标key,则返回,没有则返回false
print(Sign)
if __name__ == '__main__':
getSign()
d = {
"error_code": 0,
"stu_info": [
{
"id": 314,
"name": "矿泉水",
"sex": "男",
"age": 18,
"addr": "北京市昌平区",
"grade": "摩羯座",
"phone": "18317155663",
"gold": 100,
"cars": [
{"car1": "bmw"},
{"car2": "ben-z"},
]
}
]
}
car2 = jsonpath.jsonpath(d,'$..car1')
print(car2)
1.3 日志
#nnlog
# 提供一个方法 获取到登录后的sign
# 1、请求接口
# 2、获取返回值
# 3、解析取sign
import jsonpath
import requests
import nnlog
log = nnlog.Logger('book_server.log',backCount=5,level='INFO')#实例化,,参数1,log 的保存路径,可以不存在,会自动创建,参数2、backCount保留几个日志,参数3、level默认级别 debug 是最低级别 debug
log.debug('***')#测试程序用
def getSign():
url = 'http://***'
data = {"username":"niuhanyang","passwd":"aA123456"}
res = requests.post(url,data).json() # 通过post方法传递
log.debug(res)
#sign = res.get('login_info').get('sign')#取sign的值
#sign = res[]
sign = jsonpath.jsonpath(res,'$..sign') # 需要通过$.. 来定位 如果有目标key,则返回,没有则返回false
log.info(sign)#上线关注返回值信息
if __name__ == '__main__':
getSign()
1.4 发邮件
qq登录邮箱后,需要进入设置--账户 下开启发送邮件的服务
import yagmail
# username='uitestp4p@163.com' # 发件人的邮箱
username='***.com' # 发件人的邮箱
#password=''#生成授权码,qq、163、126都是授权码 发件人的密码
qq = '***'#qq 需要生成授权码
# mail_server = 'smtp.163.com' # 163的服务
mail_server = 'smtp.qq.com'
# mail_server = 'smtp.126.com'#126服务
m = yagmail.SMTP(user=username,password=qq,host=mail_server)
to = ['**.com'] #发给谁
cc = ['**.com'] #抄送
m.send(to=to,cc=cc, # to 发送给谁,cc 抄送给谁
subject='今天吃了吗',#标题
contents='今天吃鱼肉了吗,吃饱没', #正文
attachments=r'test.py') #附件,多个附件传一个list
知识点二 excel 读写
import openpyxl
#写
book = openpyxl.Workbook()#新建文件
sheet = book.active #默认的sheet
#sheet2 = book.get_sheet_by_name('sheet1')
# sheet.append( ['id','username','password','error_count'])
# sheet.append( [1,'wyj','123456',0])
# sheet.append( [2,'wyj','123456'])
sheet['a1'] = 'id' #指定行列
sheet['b1'] = 'username'#
sheet.cell(3,1,'1')#指定行和列
book.save('user.xlsx')
import openpyxl
#读
book = openpyxl.load_workbook('user.xlsx')
sheet = book.active
# print(sheet.cell(1,1).value)
# print(sheet['a1'].value)
# print(list(sheet.rows)) #所有行的数据
l = []
# print(list(sheet.columns)) #所有列
# for row in sheet.rows:
# t = []
# for col in row:
# t.append(col.value)
# l.append(t)#写
# print(l)
知识点三、接口开发
import flask
import json
import tools
# mock接口开发
# 1、模拟接口的意思
# 2、给别人提供数据
# 3、flask是一个web开发框架
server = flask.Flask(__name__) # 把这个python文件当做一个服务
#
@server.route('/api/login', methods=['post', 'get'])
def login():
username = flask.request.values.get('username') # 从请求里面获取到参数的
password = flask.request.values.get('password')
# flask.request.is_json#是否请求为json
# flask.request.json.get('')#入参是json的话,用这个
d = {'error_code': 1, 'msg': '登录成功', 'username': username, 'password': password}
return json.dumps(d, ensure_ascii=False)
@server.route('/api/pay')
def pay():
d = {'error_code': 1, 'msg': '支付成功'}
return json.dumps(d, ensure_ascii=False)
@server.route('/api/get_bill')
def get_bill():
table_list = ['app_myuser', 'czm']
table_name = flask.request.values.get('table_name')
limit = flask.request.values.get('limit', 50)
if table_name and table_name in table_list:
sql = 'select id,username,passwd from %s limit %s' % (table_name, limit)
result = tools.op_mysql(sql)
data = {'error_code': 0, 'msg': '成功', 'data': result}
else:
data = {'error_code': -1, 'msg': '没有权限查询该表'}
return json.dumps(data, ensure_ascii=False)
server.run(host='0.0.0.0', port=8000, debug=True)#debug = True
#默认情况下,Flask绑定IP为127.0.0.1,端口为5000。我们也可以通过下面的方式自定义:
#app.run(host='0.0.0.0', port=8888, debug=True)
# 0.0.0.0代表电脑所有的IP。