首先附上github地址:https://github.com/mitmproxy/mitmprox,上面的内容永远是最新的

  1. 作为一名测试穿戴设备相关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实践的更多相关文章

  1. Android 抓包,监控流量工具之 mitmproxy

    转:http://greenrobot.me/devpost/how-to-debug-android-http-get-started/ mitmproxy实践教程之调试 Android 上 HTT ...

  2. 如何调试 Android 上 HTTP(S) 流量

    http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/ 如何调试 Android 上 HTTP(S) ...

  3. MITM Proxy环境搭建

    MITM_Proxy环境搭建 环境要求 系统环境要求: Ubuntu 14.04 x64,CentOS 7 x64以上版本系统(建议使用xubuntu 14.04 x64,稳定硬件要求低) Pytho ...

  4. 初探爬虫 ——《python 3 网络爬虫开发实践》读书笔记

    零.背景 之前在 node.js 下写过一些爬虫,去做自己的私人网站和工具,但一直没有稍微深入的了解,借着此次公司的新项目,体系的学习下. 本文内容主要侧重介绍爬虫的概念.玩法.策略.不同工具的列举和 ...

  5. mitmproxy 使用笔记

    零.背景 我之前写过关于 charles 的使用笔记,为什么现在又要来写同类型的 mitmproxy 工具呢?下面我会娓娓道来他比 charles 多出的强大功能. 一.介绍 mitmproxy 是一 ...

  6. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

  7. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  8. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  9. Logstash实践: 分布式系统的日志监控

    文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...

随机推荐

  1. Beta阶段冲刺-3

    一. 每日会议 1. 照片 2. 昨日完成工作 3. 今日完成工作 4. 工作中遇到的困难 杨晨露:组内图表部分遇到了问题,他们的问题一出来,我就头疼了......因为要调整计划时间,所以我觉得我的困 ...

  2. Vivado绑定外部verilog编辑器

    前言 由于Vivado自带的verilog编辑器确实难用,写起来效率不高,因而寻找到了以下教程. 解决方案 引用sublime作为vivado外部verilog编辑器 sublime text中文编码 ...

  3. RYU 灭龙战 third day

    RYU 灭龙战 third day 前言 传统的交换机有自学习能力.然而你知道在SDN的世界里,脑子空空的OpenFlow交换机是如何学习的吗?今日说法带你领略SDN的mac学习能力. RYUBook ...

  4. GS 服务器超时时间设置

    工作中 遇到一个超时的问题 与徐庆同学沟通后 了解了下超时时间设置的地方 1.web.congfig问题: 常规路径 C:\Program Files\GenerSoft\bscw_local\web ...

  5. no-referrer-when-downgrade什么意思

    no referrer when downgrade的意思:降级时不推荐. 从一个网站链接到另外一个网站会产生新的http请求,referrer是http请求中表示来源的字段. no-referrer ...

  6. Java结束线程的三种方法(爱奇艺面试)

    线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...

  7. Ubuntu17安装Jenkins

    Java安装 Jenkins基于Java, 所以需要先安装java. Linux下安装java只要配置java环境变量即可. 首先,解压java到相应目录,我一般习惯把安装的软件放到目录/usr/lo ...

  8. (转)JDK1.8新特性Lambda表达式

    https://www.cnblogs.com/franson-2016/p/5593080.html Predicate predicate接收一个变量,并返回一个boolean值,predicat ...

  9. HEOI2018(九省联考) 题解集合

    转载请注明出处:http://www.cnblogs.com/LadyLex/p/8792894.html 今年的省选题目真是赞啊……Day2的题完全不会做…… 不过终于卡着校线爬着进了B队 终于改完 ...

  10. 洛谷P3613 睡觉困难综合征(LCT,贪心)

    洛谷题目传送门 膜拜神犇出题人管理员!!膜拜yler和ZSY!! 没错yler连续教我这个蒟蒻写起床困难综合症和睡觉困难综合症%%%Orz,所以按位贪心的思路可以继承下来 这里最好还是写树剖吧,不过我 ...