如何調試 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寫的。對了,我說了它是完全免費的這件事了嗎?

使用它也是相當容易的。一旦你安裝了它,便可通過在控制台輸入以下命令啟動它:

 

 

代理已經在運行,你可以開始攔截網絡流量了。接下來你就需要配置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 的使用截圖Proxy Settings 的使用截圖

 

通過Proxy Settings ,你可以創建多個代理配置。當你想要啟用其中一個,只需點擊當前連接的網絡,啟用代理,並選擇你需要的配置。如果你要禁用代理,點擊連接,並禁用它。

就這么簡單,對了,它還不需要root權限哦?

那如何調試 HTTPS?

正如前面所提到的,mitmproxy還支持HTTPS攔截。這個特性讓你在保持API endpoint 不變的情況下調試生產環境里的API變得異常方便。然而由於HTTPS的工作方式,我們需要安裝一個自定義的SSL證書,讓mitmproxy對所攔截的流量進行解密。

聽起來HTTPS攔截的步驟好像有點麻煩,其實很簡單。你只需按照mitmproxy官網的這篇設置指南便可輕易地完成設置。記得在啟動mitmproxy的時候需要額外添加一個參數,如下命令所示:

 

 

不過此處還有個小問題。Android是以一種加密的形式來保存SSL證書的,而這種加密的形式即用戶設置的手機解鎖信息。也就是說,你在Android上安裝任何SSL證書之前,系統都會提示你設置解鎖手機的方式,比如輸入PIN碼,密碼或者是某種圖案。

調試3G/4G

3G/4G這種情況下設置代理更難了。系統設置中沒有為3G/4G連接提供代理設置接口。但是!你可以通過你的手機“移動熱點”功能來實現在3G/4G這種情況下設置代理。你要准備的就是:

  1. 一台可以連接3G/4G網絡的Android手機
  2. 一台開啟了“開發者模式”的手機(另一台了)
  3. 你的筆記本電腦

接下來的步驟就簡單啦:

  1. 在第一台手機上激活“移動熱點”功能
  2. 將你的筆記本電腦和第二台手機(“開啟了開發者模式”)連上移動熱點
  3. 在筆記本電腦上啟動 mitmproxy,並將IP地址設為hotspot所對應的(通常是192.168.43.xxx 之類的)
  4. 在第二台手機上使用Proxy Settings設置代理

OK,在3G/4G這種情況下設置代理就是這樣子的。

 

總結

到目前為止,我還試過其他兩種代理工具,CharlesFiddler。 但是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實踐的文章,希望能給大家一些啟發。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM