mitmproxy实践
首先附上github地址:https://github.com/mitmproxy/mitmprox,上面的内容永远是最新的
- 作为一名测试穿戴设备相关app的工程师,与数据打交道是常事,那么,如果想要获取app上传给服务器的文件,怎么获取?
上传文件,http请求头header的Content-Type字段multipart/form-data
注意:如果要修改请求参数,必须得了解Content_Type的类型,Content_Type主要告知请求的消息主要用了何种编码,常见3中类型:
application/x-www-form-urlencoded
form形式,提交的数据按照 key1=val1&key2=val2 的方式进行编码
application/json
JSON编码方式,消息主体是序列化后的 JSON 字符串
multipart/form-data
主要是传输二进制流等,boundary区分普通文件内容和二进制流内容
def request(flow: http.HTTPFlow) -> None:
target=["/course/data/save"]
url_path = flow.request.path
print("完整收到请求(包括body部分)={}".format(url_path))
if url_path.split("?")[0] in target:
ctx.log.info("#"50)
ctx.log.info("课程接口")
ctx.log.info(flow.request.url)
fp=open("courseData.dat","wb")
for key,value in flow.request.multipart_form.items():
print(key)
if key==b"courseData":#文件名
fp.write(value)
fp.close()
2. 接口返回字段变更,为了兼容,暂时未去掉,未来去掉,这种情况下,app需要做好兼容性测试,那么需要通过模拟删除相应字段
def response(self,flow: http.HTTPFlow) -> None:
if flowfilter.match(self.filter, flow):
url_path = flow.request.path
if "由于隐私该处省略" in url_path:
ctx.log.warn("#" * 60)
res=json.loads(flow.response.text)
for i in res.get("data"):
i.pop('happenDate')#删除happenDate字段,这个地方得看返回内容的结构
flow.response.set_text(json.dumps(res))
3. 笔者测试的app在header中需要带上一段自定义的字段,当中途新增接口,有时候后开发会忘记添加,那么,测试人员在测试迭代需求的时候,需要检查一遍新增接口请求,阅读完接口后可编写脚本,待发布app时直接执行
def request(self,flow: http.HTTPFlow) -> None:
if url_path.split("?")[0] in "特定接口*":
ctx.log.warn("#" * 60)
dict_obj = json.loads(flow.request.headers.get("selfHeader","{}")) # 字典字符串,headers为字典对象
4.自定义options
默认options:
https://docs.mitmproxy.org/stable/concepts-options/
自定义filter
def load(self, loader):
"""
脚本载入时执行,对应--options参数,默认有多个可供选择的项,如flow_detail,同时可在载入脚本时自定义选项
option格式:(name,typespec,defult,help)
"""
loader.add_option("filter", str, "", "过滤规则")
def configure(self,updated):
"""脚本载入,读取配置"""
self.filter =flowfilter.parse(ctx.options.filter) #得到一个过滤器
def request(self,flow: http.HTTPFlow) -> None:
if flowfilter.match(self.filter, flow):
print("filter")
结语
在使用fitler这个过滤功能时,发现源代码有一处错误,如
class FDomain(_Rex):
code = "d"
help = "Domain"
flags = re.IGNORECASE
is_binary = False
@only(http.HTTPFlow, websocket.WebSocketFlow)
def __call__(self, f):
if isinstance(f, websocket.WebSocketFlow):
f = f.handshake_flow
return bool(
self.re.search(f.request.host) or
self.re.search(f.request.pretty_host) #这里应该添加str,否则一直报错,其他地方类似
)
作者:小蜗牛的成长
链接:https://www.jianshu.com/p/23fe9858b2bb
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
mitmproxy实践的更多相关文章
- Android 抓包,监控流量工具之 mitmproxy
转:http://greenrobot.me/devpost/how-to-debug-android-http-get-started/ mitmproxy实践教程之调试 Android 上 HTT ...
- 如何调试 Android 上 HTTP(S) 流量
http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/ 如何调试 Android 上 HTTP(S) ...
- MITM Proxy环境搭建
MITM_Proxy环境搭建 环境要求 系统环境要求: Ubuntu 14.04 x64,CentOS 7 x64以上版本系统(建议使用xubuntu 14.04 x64,稳定硬件要求低) Pytho ...
- 初探爬虫 ——《python 3 网络爬虫开发实践》读书笔记
零.背景 之前在 node.js 下写过一些爬虫,去做自己的私人网站和工具,但一直没有稍微深入的了解,借着此次公司的新项目,体系的学习下. 本文内容主要侧重介绍爬虫的概念.玩法.策略.不同工具的列举和 ...
- mitmproxy 使用笔记
零.背景 我之前写过关于 charles 的使用笔记,为什么现在又要来写同类型的 mitmproxy 工具呢?下面我会娓娓道来他比 charles 多出的强大功能. 一.介绍 mitmproxy 是一 ...
- webp图片实践之路
最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- Logstash实践: 分布式系统的日志监控
文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...
随机推荐
- 第二个Sprint冲刺总结
第二个Sprint冲刺总结 ( 1)团队Github: https://github.com/ouqifeng/EasyGoOperation.git ( 2 ) 团队贡献分: 廖焯燊:22 何武鹏: ...
- Daily Scrum - 12/03
Meeting Minutes 后端基本完成,结束当前Sprint, 开始下一个Sprint.进一步讨论了UI,并完成了任务分配. Burndown Progress part 组 ...
- Android : Error inflating class android.support.design.widget.NavigationView
之前一直没搞定的,今天终于解决了. Android报错: android.view.InflateException: Error inflating class android.support. ...
- PAT 1064 朋友数
https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336 如果两个整数各位数字的和是一样的,则被称为是 ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...
- Java NIO Socket编程实例
各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用 ...
- luogu1540 [NOIp2011]机器翻译 (队列)
#include<bits/stdc++.h> #define pa pair<int,int> #define CLR(a,x) memset(a,x,sizeof(a)) ...
- 解题:CF1063F String Journey
题面 分析性质以进行DP 性质1:一定有一个最优解通过每次删除第一个或最后一个字符达到 这个脑补一下就能证明了 那么我们设$dp[i]$表示后缀$[i,n]$选出一个前缀所能达到的最大长度,从右往左D ...
- haoi2006_受欢迎的牛_Solution
Brief Solution: 强连通tarjan+压缩点+判断是否除了一个点,其它点都有出度 Detailed Solution: 把牛看成点若一个点b能到达点a,则b认为a受欢迎若所有的点都能到达 ...
- java开发爬虫Deno
java开发爬虫Deno 身为一个程序员不会两三手爬虫怎么能在行业里立足啊,这是开发中自己写的一个java爬虫的Demo,供大家参考. java爬虫的开发依赖于jsoup.jar 直接上代码 publ ...