如何調試 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寫的。對了,我說了它是完全免費的這件事了嗎?
使用它也是相當容易的。一旦你安裝了它,便可通過在控制臺輸入以下命令啟動它:
1
</div>
</td>
| $ mitmproxy [ - b IP_ADDR ] [ - p PORT ]
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
代理已經在運行,你可以開始攔截網絡流量了。接下來你就需要配置Android手機,將所有的流量都重定向到之前命令里設置的代理服務器地址上去(IP_ADDR + PORT)。 代理設置App: “Proxy Settings”現在我們需要在Android手機上進行代理配置。具體步驟如下:
如果要禁用代理同理。現在Android端的設置就大功告成了。 是不是覺得上面的步驟有點頭疼?不急!幸虧還有Proxy Settings 這個App。用了Proxy Settings,上面繁瑣的步驟就變得異常簡單了。有了這個輕量級的App,你只需輕輕一點,便可輕松地開啟或禁用網絡連接里的代理設置。 </div>
</div>
</div> 通過Proxy Settings ,你可以創建多個代理配置。當你想要啟用其中一個,只需點擊當前連接的網絡,啟用代理,并選擇你需要的配置。如果你要禁用代理,點擊連接,并禁用它。 就這么簡單,對了,它還不需要root權限哦? 那如何調試 HTTPS?正如前面所提到的,mitmproxy還支持HTTPS攔截。這個特性讓你在保持API endpoint 不變的情況下調試生產環境里的API變得異常方便。然而由于HTTPS的工作方式,我們需要安裝一個自定義的SSL證書,讓mitmproxy對所攔截的流量進行解密。 聽起來HTTPS攔截的步驟好像有點麻煩,其實很簡單。你只需按照mitmproxy官網的這篇設置指南便可輕易地完成設置。記得在啟動mitmproxy的時候需要額外添加一個參數,如下命令所示: $ mitmproxy -a IP_ADDR -p PORT —-no-upstream-cert
| |