转自: http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/
前面的话
在Android开发中我们常常会和API 打交道,可能你不想,但是这是避不开的。大部分情况下,调试发送网络请求和接收响应的过程都是十分痛苦的。
总之我们要看到最终的请求是什么样子的不是一件容易的事情,响应也是如此。
如果碰到困难,请使用代理
解决这样的问题有各种各样的方法和门道,但是我今天要分享的是在我看来最快,最容易也是最可行的方法。
代理。当然,你肯定知道什么是代理,所以我就不啰嗦它的定义了。
mitmproxy。
mitmproxy
完全免费的这件事了吗?
使用它也是相当容易的。一旦你安装了它,便可通过在控制台输入以下命令启动它:
|
1
|
]
|
代理已经在运行,你可以开始拦截网络流量了。接下来你就需要配置Android手机,将所有的流量都重定向到之前命令里设置的代理服务器地址上去(IP_ADDR + PORT)。
代理设置App: “Proxy Settings”
现在我们需要在Android手机上进行代理配置。具体步骤如下:
- 进入Android的Wi-Fi设置
- 长按当前连接的网络
- 选择“修改网络”选项
- 勾选“显示高级选项”
- 启用代理服务器并将代理设置为“手动”
- 输入之前设置好的的IP地址和端口。
如果要禁用代理同理。现在Android端的设置就大功告成了。
轻轻一点,便可轻松地开启或禁用网络连接里的代理设置。
Proxy Settings ,你可以创建多个代理配置。当你想要启用其中一个,只需点击当前连接的网络,启用代理,并选择你需要的配置。如果你要禁用代理,点击连接,并禁用它。
就这么简单,对了,它还不需要root权限哦?
那如何调试 HTTPS?
安装一个自定义的SSL证书,让mitmproxy对所拦截的流量进行解密。
听起来HTTPS拦截的步骤好像有点麻烦,其实很简单。你只需按照mitmproxy官网的这篇设置指南便可轻易地完成设置。记得在启动mitmproxy的时候需要额外添加一个参数,如下命令所示:
|
1
|
cert
|
不过此处还有个小问题。Android是以一种加密的形式来保存SSL证书的,而这种加密的形式即用户设置的手机解锁信息。也就是说,你在Android上安装任何SSL证书之前,系统都会提示你设置解锁手机的方式,比如输入PIN码,密码或者是某种图案。
调试3G/4G
3G/4G这种情况下设置代理更难了。系统设置中没有为3G/4G连接提供代理设置接口。但是!你可以通过你的手机“移动热点”功能来实现在3G/4G这种情况下设置代理。你要准备的就是:
- 一台可以连接3G/4G网络的Android手机
- 一台开启了“开发者模式”的手机(另一台了)
- 你的笔记本电脑
接下来的步骤就简单啦:
- 在第一台手机上激活“移动热点”功能
- 将你的笔记本电脑和第二台手机(“开启了开发者模式”)连上移动热点
- 在笔记本电脑上启动 mitmproxy,并将IP地址设为hotspot所对应的(通常是192.168.43.xxx 之类的)
- 在第二台手机上使用Proxy Settings设置代理
OK,在3G/4G这种情况下设置代理就是这样子的。
总结
Fiddler, 它只能在Windows平台上使用。
mitmproxy + Proxy Settings 的结合让我省了不少心,我希望它们也能为你所用。
如果你有更好的解决方法,记得告诉我。
本文翻译自音乐App musiXmatch 公司高级Android工程Sebastiano Gottardo。原文地址:https://medium.com/@rotxed/how-to-debug-http-s-traffic-on-android-7fbe5d2a34
UPDATE:有同学反应对这个工具到底怎么使用不是很清楚,于是我打算在本文基础上再增加一些实践相关的文字,后来发现篇幅过于臃肿,干脆新写了一篇关于mitmproxy实践的文章,希望能给大家一些启发。