1. 背景
最近在准备iOS应用强制支持https的特性测试,需要梳理相应的请求,初步策略是选择通过抓包工具进行验证,查看相应的请求链接是否为https, 核对请求返回的状态码及返回数据是否正常。我们常用的抓包工具主要是fiddler和charles, 但是我这边使用charles抓取https遇到个坑,代理证书什么都安装了,SSL Proxy配置也正常,但是抓取的https请求就是返回失败,且数据乱码,如下图:
另外也有试用过anyproxy抓包工具,发现也是同样的情况,但是在同事电脑上是可以正常的,百度了许久,目前还没找到具体原因,有知道原因的,求告知。
2. mitmproxy介绍
官网:https://mitmproxy.org/
Github地址:https://github.com/mitmproxy/mitmproxy
3. mitmproxy安装
网络上提供了三种方式,进行安装
3.1 使用pip的方式安装
[html] view plain copy
- pip install mitmproxy --ignore-installed six
3.2 使用homebrew的方式安装
[html] view plain copy
- brew install mitmproxy
3.3 下载release文件,解压安装, 链接地址:https://github.com/mitmproxy/mitmproxy/releases/tag/v1.0.2
4. 抓取https实践
4.1 启动mitmproxy, 可以直接双击mitmproxy文件启动,也可以添加mitmproxy路径到PATH变量中,终端输入mitmproxy命令进行启动。
4.2 配置代理, 端口默认为8080, 也可以按如下进行修改
[html] view plain copy
- mitmproxy -b 电脑ip -p 指定端口
4.3 Safari访问mitmproxy.it, 安装mitmproxy证书到手机上,并信任:
4.4 操作手机应用,查看相应的请求,这里以美团为例, 可以看到相应的https请求能够正常的抓取,如图:
5. 常用快捷键
- 在列表界面,按用j,k或者上下方向键在列表上浏览
- 在列表界面,按回车进入详情界面
- 在详情界面,按q,返回列表界面
- 在详情界面,按tab键或者h,l,在Request,Response,Detail三个tab之间切换。按j,k或者上下方向键可以滚动查看详情
- 在列表界面,按G跳到最新一个请求
- 在列表界面,按g跳到第一个请求
- 在列表界面,按d删除当前选中的请求,按D恢复刚才删除的请求
- 在列表界面,按z清空请求列表
6. 拦截与修改请求
6.1 请求列表界面,按i进入Intercept Filter模式, 输入相应的关键字,即可拦截相应的请求;按esc可以退出intercept filter模式:
6.2 点击相应的请求,进入详情界面,切换到Request tab, 按e进入编辑request请求,e.g. 修改请求参数:
6.3 修改完请求参数后,按a, 执行请求,查看response,发现请求修改成功:
参考资料:
1. https://mitmproxy.org/doc/mitmproxy.html
2. http://www.tuicool.com/articles/EVV3Qza