作业
使用mitmproxy,贴出来效果图片
- 对第一个股票保持原样
- 对第二个股票名字加长一倍
- 对第三个股票名字变成空
拓展作业
- 理解第三个案例,并添加自己的条件
使用mitmproxy,贴出来效果图片
陈智斌 【雪球App抓包与Mock实战(二)】作业提交
练习一
修改部分代码:
data[“data”][“items”][1][“quote”][“name”] = data[“data”][“items”][1][“quote”][“name”]*2
data[“data”][“items”][2][“quote”][“name”] = “”
拓展作业
数据处理部分修改代码:
elif isinstance(data, int) or isinstance(data, float):
‘’’
假如数据大于0,data就乘以传参num
假如数据小于0,data就乘以传参-num
‘’’
data_new= datanum if data>0 else data-num
修改具体值部分传参修改:
new_data = json_travel(data , num=1, text=1)
实现将一片绿的熊市变成一片红的牛市
修改前:
修改后:
作业1
data["data"]["items"][1]["quote"]["name"] += data["data"]["items"][1]["quote"]["name"]
data["data"]["items"][2]["quote"]["name"] = ""
def response(flow: http.HTTPFlow):
if "quote.json" in flow.request.url and "x=" in flow.request.url:
# 先接受返回信息
data = json.loads(flow.response.content)
pprint(data)
# 中间做一些修改
data["data"]["items"][1]["quote"]["name"] += data["data"]["items"][1]["quote"]["name"]
data["data"]["items"][2]["quote"]["name"] =" "
# 修改返回信息的字段
pprint(data)
flow.response.text=json.dumps(data)
### 实现定制化的等价类
import json
from pprint import pprint
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "quote.json" in flow.request.url and "x=" in flow.request.url:
# 先接受返回信息
data = json.loads(flow.response.content)
# 对数据进行批量修改
new_data=json_travel(data,num=1,text=1)
# 打印 参数:indent=2,ensure_ascii=False 格式化输出
data_mess = json.dumps(new_data,indent=2,ensure_ascii=False)
print("=============修改后的信息============================")
flow.response.text=data_mess
#返回值常见类型:dict,array,txt,num
def json_travel(data,array=None,text=1,num=1):
"""
{
"data":
{"name":{
"nikename":"XXXX"
}
}
}
"""
if isinstance(data, dict):
# 定义一个空字典
data_new = dict()
# 对字典类型进行操作
for k, v in data.items():
# 递归操作:第一次传入 data下面{name{...}}的值。一层一层往里传
# 当遍历到最后一个nikename 的value不是deict 就会跳出循环,到下一个分支
data_new[k] = json_travel(v, array, text, num)
# 进对名字进行double显示操作
if k=="name":
data_new[k] = json_travel(v, array,text=2,num=1)
# 将涨跌幅: 如果<-1% 变为正数;如果>1% 就乘以100
if k=="percent":
pprint(type(data_new[k]))
pprint(data_new[k])
if data_new[k]>-1:
data_new[k] = json_travel(v, array, text=1, num=-1)
else:
data_new[k] = json_travel(v, array, text=1, num=100)
elif isinstance(data, list):
data_new = list()
for item in data:
item_new = json_travel(item, array, text, num)
if array is None:
# 最后需要传回一个新的列表 所以要append;否则将传回一个空列表
# 针对股票列表页批量操作:倍增
data_new.append(item_new)
data_new.append(item_new)
else:
pass
# 递归到最后 得到的都是一些简单的类型:string,int,boolean
# 如果是字符串,则和传入的text相乘(或想加:一些修改操作),实现对字符串批量修改
elif isinstance(data, str):
data_new = data * text
# 如果是int或float的数字类型,那么对数字做乘积
elif isinstance(data, int) or isinstance(data, float):
data_new = data * num
# 其余类型传入什么返回什么
else:
data_new = data
return data_new
郑向红 作业1:
作业2:
原页:
名字增长一倍;值大于0减10,小于0加10,为0的保持不变。
作业1 --卢海清
data["data"]["items"][1]["quote"]["name"] = data["data"]["items"][1]["quote"]["name"]*2
data["data"]["items"][2]["quote"]["name"] = ""
作业一:
作业二:理解第三个案例,并添加自己的条件
修改items下所有的字符串,加倍,
修改items下所有的数字,乘100,
排除market、status
王小刚作业1:
import json
from pprint import pprint
from mitmproxy import http
def response(flow: http.HTTPFlow):
# redirect to different host
if “quote.json” in flow.request.url and “x=” in flow.request.url:
## 先接收到返回信息
data = json.loads(flow.response.content)
with open(“E:\pythonclass\pythonprj\Mock\mock2.json”,“w+”) as f:
json.dump(data,f)
print("=============修改前的信息========start====================")
pprint(data)
print("=============修改前的信息========end======================")
## 中间做一些修改
data[“data”][“items”][0][“quote”][“name”] = data[“data”][“items”][0][“quote”][“name”]
data[“data”][“items”][1][“quote”][“name”] += data[“data”][“items”][1][“quote”][“name”]
data[“data”][“items”][2][“quote”][“name”] = “”
data[“data”][“items”][3][“quote”][“name”] = data[“data”][“items”][3][“quote”][“name”]+“HMS”
## 修改返回信息的字段
print(“修改后的信息start*****”)
pprint(data)
print(“修改后的信息end*******”)
flow.response.text = json.dumps(data)
作业二:
1、股票列表翻倍
2、负值变正值,正值翻10倍
3、股票名称翻倍
作业:
data[“data”][“items”][1][“quote”][“name”] = data[“data”][“items”][1][“quote”][“name”]*2
data[“data”][“items”][2][“quote”][“name”] = “”
作业一:分别使用本地文件和重写方式,修改接口返回值
代码:
作业二:将所有股票名称长度加倍,并把接口所有int值和float均乘以100,但不处理items_size
代码:
原图:
结果图:
王熙曈作业
def response(flow: http.HTTPFlow):
if “quote.json” in flow.request.url:
# 获取请求返回的json
data = json.loads(flow.response.content)
# 修改name字段,拼接test
data[‘data’][‘items’][1][‘quote’][‘name’] = data[‘data’][‘items’][1][‘quote’][‘name’] * 2
data[‘data’][‘items’][2][‘quote’][‘name’] = " "
# 打印修改后的data
pprint(data)
# 替换response data
flow.response.text = json.dumps(data)
匡志荣作业
1.
import json
from pprint import pprint
from mitmproxy import http
def response(flow: http.HTTPFlow):
# redirect to different host
if “quote.json” in flow.request.url and “x=” in flow.request.url:
data = json.loads(flow.response.content)
pprint(data)
data["data"]["items"][0]["quote"]["name"] = data["data"]["items"][0]["quote"]["name"]
data["data"]["items"][1]["quote"]["name"] = data["data"]["items"][1]["quote"]["name"]*2
data["data"]["items"][2]["quote"]["name"] = ""
pprint(data)
flow.response.text = json.dumps(data)