首先附上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. spring @component的作用

    该文转载自:http://tomfish88.iteye.com/blog/1497557 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@reposi ...

  2. 三步轻松搞定delphi中CXGRID手动添加复表头(多行表头,报表头)

    网上有代码动态生成cxgrid多行表头的源码,地址为:http://mycreature.blog.163.com/blog/static/556317200772524226400/ 如果要手动设计 ...

  3. Windows 7 上面 redis 启动报错的处理

    Windows 7或者是 win10 上面 安装redis 的windows 3.2.100 的版本 启动报错: Creating Server TCP listening socket *:: li ...

  4. k8s 使用 traefik 将clusterIP的 svc 暴露服务的方法

    0. 前置条件 安装好k8s.. traefik的简介图 1. 安装 traefik 方法: 创建一个目录 并且存放部分文件等. mkdir /traefik cd /traefik git clon ...

  5. Ubuntu使用dense_flow提取视频图像的光流图像

    使用dense_flow求取图像的光流图像,原项目地址: https://github.com/wanglimin/dense_flow 该方法使用的是opecnv最基本的光流图像计算方法,输出为 f ...

  6. 以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)

    以BZOJ 2002 弹飞绵羊为例学习有根树LCT(Link-Cut Tree) 注:本文非常简单,只涉及有根树LCT,对于无根树,LCT还有几个本文没有提到的操作,以后慢慢更新 =v= 知识储备 [ ...

  7. 导致 KEIL error #20 的一种情况

    > 描述 <+> 环境为 KEIL5.20 & STM32F429工程,平台为 win10 <+> 结构体原形如下 @File <A.h> #incl ...

  8. Java中list如何利用遍历进行删除操作

    转: Java中list如何利用遍历进行删除操作 2018年03月31日 10:23:41 Little White_007 阅读数:3874   Java三种遍历如何进行list的便利删除: 1.f ...

  9. 错误 1 无法将文件“obj\Debug\XXX.exe”复制到“bin\Debug\XXX.exe”。文件“bin\Debug\XXX.exe”正由另一进程使用,因此该进程无法访问该文件

    在重新生成Windows服务的时候出现的这个问题,原因是因为你的Windows服务已经在运行了,你可以卸载掉这个服务,也可以在资源管理器里直接关闭.

  10. 利用CSS3实现简书中点击“喜欢”时的动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...