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

前面的话

在Android开发中我们常常会和API 打交道,可能你不想,但是这是避不开的。大部分情况下,调试发送网络请求和接收响应的过程都是十分痛苦的。

有多少次我们经过调试发现API的调用失败仅仅是因为我们的编码错了或者丢失了一个HTTP头部参数?在调试的过程中,我们发现出现错误的原因千奇百怪。总之我们要看到最终的请求是什么样子的不是一件容易的事情,响应也是如此

如果碰到困难,请使用代理

解决这样的问题有各种各样的方法和门道,但是我今天要分享的是在我看来最快,最容易也是最可行的方法。

由于调试HTTP请求和响应是相当繁琐的(调试HTTPS更加繁琐),因此在这种前提下你能使用的最好工具就是代理。当然,你肯定知道什么是代理,所以我就不啰嗦它的定义了。

现有的代理工具中它们的用法,特性以及操作系统的兼容性都各不相同,如何选择一款合适的代理呢?要我说,简单点,就用mitmproxy

mitmproxy

我已经无法用语言来形容mitmproxy的方便和强大了。用mitmproxy 官网上的介绍一句话,就是“an interactive, SSL-capable man-in-the-middle proxy for HTTP with a console interface”。没错,你可以通过控制台来操作它;没错,它还支持HTTPS;没错,它允许“对流量进行拦截,检测,修改和回放”;没错,它还是跨平台的,因为它是用Python写的。对了,我说了它是完全免费的这件事了吗?

使用它也是相当容易的。一旦你安装了它,便可通过在控制台输入以下命令启动它:

$ mitmproxy [-b IP_ADDR] [-p PORT]

代理已经在运行,你可以开始拦截网络流量了。接下来你就需要配置Android手机,将所有的流量都重定向到之前命令里设置的代理服务器地址上去(IP_ADDR + PORT)。

代理设置App: “Proxy Settings”

现在我们需要在Android手机上进行代理配置。具体步骤如下:

  1. 进入Android的Wi-Fi设置
  2. 长按当前连接的网络
  3. 选择“修改网络”选项
  4. 勾选“显示高级选项”
  5. 启用代理服务器并将代理设置为“手动”
  6. 输入之前设置好的的IP地址和端口。

如果要禁用代理同理。现在Android端的设置就大功告成了。

是不是觉得上面的步骤有点头疼?不急!幸亏还有Proxy Settings 这个App。用了Proxy Settings,上面繁琐的步骤就变得异常简单了。有了这个轻量级的App,你只需轻轻一点,便可轻松地开启或禁用网络连接里的代理设置。

proxy_settings app 截图

继续阅读“如何调试 Android 上 HTTP(S) 流量”