mitmproxy 抓包工具,优点可以使用python进行二次开发,或者进行接口的mock

官网地址:https://www.mitmproxy.org/

打算用这个最初的需求是,想对app做接口测试,但是app的接口有200多个,这么多接口,如果人工的的抓包或者获取,很浪费人力,那能不能自动的抓取到所有的请求呢?

答案是可以,使用mitmdump -s xx.py 可以过滤我们想要的数据,比如存到数据库之类的

from mitmproxy import ctx

# 所有的请求都会经过request
def request(flow):
    info = ctx.log.info
    d = {}
    if flow.request.host == 'xxxxx':  # 过滤请求,如果host是xxx则写入请求相关信息
        d['url'] = flow.request.url
        d['host'] = flow.request.host
        d['headers'] = flow.request.headers
        d['method'] = flow.request.method
        if flow.request.method == 'POST':
        d['body'] = flow.request.get_text()
        fp = open("/Users/dcc/Desktop/aaaa.txt",'a+',encoding='utf-8')
        fp.write(str(d) + '\n')

# 所有的请求都会经过request
def response(flow):
    info = ctx.log.info
    # info(str(flow.response.headers))
    # info(str(flow.response.cookies))
    info(str(flow.response.text))
    fp = open("/Users/dcc/Desktop/bbbb.txt",'a+',encoding='utf-8')
    fp.write(str(flow.response.text) + '\n')

那既然能拿到所有的请求是不是可以为所欲为了呢?具体的应用场景可以自行尝试哈!比如爬虫?

MOCK功能:

mock功能也是类似,在request里判断发送的请求是不是自己想要的,然后进行修改

修改请求:

def request(flow):
    if flow.request.url.startswith("http://xxx.x.xxx.com.cn/xxx/xxxx/xxxx"):
        ctx.log.info("modify request form")
    if flow.request.urlencoded_form:
        flow.request.urlencoded_form["code"] = "11111"
    else:
        flow.request.urlencoded_form = [
            ("abc", "1234"),("name","name")
        ]

修改返回:

def response(self, flow):
    if flow.request.url.startswith("https://xxx.x.xxx.com.cn/activityInfo/getPrizeInfo=="):
    //获取响应的json字符串,转成python对象进行解析和修改
        response = json.loads(flow.response.get_text())
        response['limitCount'] = 1
        //修改完成后,奖python对象转成json字符串,set进请求的响应体重发送给客户端
        flow.response.set_text(json.dumps(response))
        ctx.log.info('modify limitCount')

mitmproxy 使用mitmdump 过滤请求的更多相关文章

  1. mitmproxy,mitmdump

    mitmproxy,mitmdump # mitmproxy 官网:https://mitmproxy.org/ # githubhttps://github.com/mitmproxy # wind ...

  2. SuperMap-iServer过滤请求返回值

    目的: iServer发布的arcgis地图服务中,由于tileinfo参数为null,导致用arcgis-ios客户端开发的APP闪退.通过过滤器将get请求的返回值修改 代码: package c ...

  3. Java Servlet (1) —— Filter过滤请求与响应

    Java Servlet (1) -- Filter过滤请求与响应 版本: Java EE 6 参考来源: Oracle:The Java EE 6 Tutorial: Filtering Reque ...

  4. Charles系列三:Charles打断点(包含修改请求,修改返回的内容),模拟慢速网络(弱网测试),域名映射,过滤请求,接口调试,打压测试

    一:Charles断点的使用(包含修改请求,修改返回的数据) 设置断点来修改请求和返回的数据,在开发过程中可以模拟多种响应.步骤如下: 1.添加断点方法有两种: 方法1:找到Charles中菜单项Pr ...

  5. WebAuthorize(中间件对所有请求进行拦截)core只有通过添加中间件过滤请求方式 而非继承然后写特性的那种方式

    一.WebAuthorize 1.项目名称 WebAuthorize 2.加个中间件 过滤请求. using Microsoft.AspNetCore.Builder; using Microsoft ...

  6. App爬虫神器mitmproxy和mitmdump的使用

    原文 mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler.Charles的功能,只不过它是一个控制台的形式操作. mitmproxy还有两个关联组件.一个是mitmdum ...

  7. 【Spring】使用Filter过滤请求

    原文:http://liujiajia.me/#/blog/details/spring-filter-request-with-filter public class CustomizedFilte ...

  8. HttpHandler过滤请求..

    记得以前写过一篇..后来找不到了..我自己也忘记怎么弄了.. 在网上找了很多的教程..写的总有瑕疵..感觉不顺畅.. 自己来一篇.. 其实很简单.. 先建立一个类  继承并实现接口 IHttpHand ...

  9. [转]使用 mitmproxy + python 做拦截代理

    使用 mitmproxy + python 做拦截代理   本文是一个较为完整的 mitmproxy 教程,侧重于介绍如何开发拦截脚本,帮助读者能够快速得到一个自定义的代理工具. 本文假设读者有基本的 ...

随机推荐

  1. 008-elasticsearch5.4.3【二】ES使用、ES客户端、索引操作【增加、删除】、文档操作【crud】

    一.ES使用,以及客户端 1.pom引用 <dependency> <groupId>org.elasticsearch.client</groupId> < ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_07 Collections工具类_1_Collections集合工具类的方法

    这是一个个的添加的方式 参数是个可变的元素.可以传递任意多的元素 shuffle打乱集合元素顺序

  3. mac 添加mysql的环境变量和删除mysql

    添加环境变量 1.创建 .bash_profile,已创建过忽略这步 (1)启动终端 (2)进入当前用户的home目录(默认就是):         cd ~ 或 cd /Users/YourMacU ...

  4. mooc-IDEA 项目/文件之间跳转--002

    二.IntelliJ IDEA -项目之间跳转 1.Next Project Window :跳转到下一个项目 [ ctrl+alt+) ] 2.Previous Project Window:跳转到 ...

  5. Junit 3.8源码分析

    JUnit背景介绍 JUnit是由Erich Gamma和Kent Beck 编写的一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓的白 ...

  6. Html mate标签的常见功能

    一.常用的功能 1.禁止屏幕缩放 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, us ...

  7. Spring 容器的基本用法

    容器的基本用法 bean 是 Spring 中最核心的东西,因为 Spring 就像是个大水桶,而 bean 就像是容器中的水,水桶脱离了水也没什么用处了,来看看 bean 的定义. public c ...

  8. spring-第十六篇之AOP面向切面编程之Spring AOP

    1.上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能. AOP的实现可分为两类(根据AOP修改源码的时机划分): 1& ...

  9. 初探LINUX之--基础知识篇

    一 Linux哲学思想 1 一切都是一个文件(包含硬件) 2 小型,单一用途的程序 3 链接程序,共同完成复杂的任务 4 避免令人困惑的用户界面 5 配置数据存储在文本中 二 Linux重要概念 Sh ...

  10. java 标识接口的作用

    标识接口的作用 标识接口是没有任何方法和属性的接口.标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型. 标接口在Java语言中有一些很著名的应用,例如我们常用的Arra ...