如何调试 Android 上 HTTP(S) 流量
http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/
如何調試 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 | $?mitmproxy?[-b?IP_ADDR]?[-p?PORT] |
?
代理已經在運行,你可以開始攔截網絡流量了。接下來你就需要配置Android手機,將所有的流量都重定向到之前命令里設置的代理服務器地址上去(IP_ADDR + PORT)。
代理設置App: “Proxy Settings”
現在我們需要在Android手機上進行代理配置。具體步驟如下:
如果要禁用代理同理?,F在Android端的設置就大功告成了。
是不是覺得上面的步驟有點頭疼?不急!幸虧還有Proxy Settings?這個App。用了Proxy Settings,上面繁瑣的步驟就變得異常簡單了。有了這個輕量級的App,你只需輕輕一點,便可輕松地開啟或禁用網絡連接里的代理設置。
Proxy Settings 的使用截圖?
通過Proxy Settings?,你可以創建多個代理配置。當你想要啟用其中一個,只需點擊當前連接的網絡,啟用代理,并選擇你需要的配置。如果你要禁用代理,點擊連接,并禁用它。
就這么簡單,對了,它還不需要root權限哦?
那如何調試 HTTPS?
正如前面所提到的,mitmproxy還支持HTTPS攔截。這個特性讓你在保持API endpoint 不變的情況下調試生產環境里的API變得異常方便。然而由于HTTPS的工作方式,我們需要安裝一個自定義的SSL證書,讓mitmproxy對所攔截的流量進行解密。
聽起來HTTPS攔截的步驟好像有點麻煩,其實很簡單。你只需按照mitmproxy官網的這篇設置指南便可輕易地完成設置。記得在啟動mitmproxy的時候需要額外添加一個參數,如下命令所示:
?
| 1 | $?mitmproxy?-a?IP_ADDR?-p?PORT?—-no-upstream-cert |
?
不過此處還有個小問題。Android是以一種加密的形式來保存SSL證書的,而這種加密的形式即用戶設置的手機解鎖信息。也就是說,你在Android上安裝任何SSL證書之前,系統都會提示你設置解鎖手機的方式,比如輸入PIN碼,密碼或者是某種圖案。
調試3G/4G
3G/4G這種情況下設置代理更難了。系統設置中沒有為3G/4G連接提供代理設置接口。但是!你可以通過你的手機“移動熱點”功能來實現在3G/4G這種情況下設置代理。你要準備的就是:
接下來的步驟就簡單啦:
OK,在3G/4G這種情況下設置代理就是這樣子的。
?
總結
到目前為止,我還試過其他兩種代理工具,Charles和Fiddler。 但是mitmproxy完爆他們兩個。Charles?可能是在功能,靈活性以及操作系統支持這幾個方面和mitmproxy最接近的,但是它一不免費,二不開源。 對于?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實踐的文章,希望能給大家一些啟發。
?
本文轉自wanqi博客園博客,原文鏈接:http://www.cnblogs.com/wanqieddy/p/4262765.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的如何调试 Android 上 HTTP(S) 流量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5入门之新的选择器
- 下一篇: [Android]乐Pad开发准备