簡體   English   中英

如何在Android設備上調試http調用?

[英]How to debug http calls on Android devices?

我正在為Android編寫一個Lovefilm客戶端,除了我一直遇到遠程調用從API檢索數據的問題之外,它並沒有太糟糕。

有沒有人有任何調試這樣的遠程調用的技巧? 我可以在Android上使用tcpdump,還是以原生方式進行操作?

例如,我正在使用用於OAuth的Scribe-java庫來訪問Lovefilm API,我可以在設備運行Gingerbread時驗證查找並檢索用戶帳戶上的電影列表,但是嘗試在Froyo上檢索accessToken導致一個空白的響應和明顯的響應代碼為-1,我希望能夠看到它們下面發生了什么。

我希望能夠使用原始http的另一個例子是嘗試運行搜索,我得到並且IOError說“ 收到的身份驗證質詢為空

在這些情況下,我用android模擬器使用了Fiddler(用於調試http調用的http-proxy)。 只需啟動代理,然后使用正確的代理地址啟動模擬器(-http-proxy)。

Fiddler是最有用的選擇。 在模擬器上@Scythe答案可行,但在真實設備上,您需要在Apache Http客戶端中設置代理。 以下代碼將執行此操作:

HttpHost proxy = new HttpHost("youripaddr", 8888); 
params.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

如果你使用https,fiddler就不那么有用了。 在這種情況下,可以在Apache Http Client中啟用內置日志記錄支持。 以下代碼執行此操作:

僅限標題:

java.util.logging.Logger apacheHeaderLog = java.util.logging.Logger.getLogger("org.apache.http.headers");       
apacheHeaderLog.setLevel(java.util.logging.Level.FINEST);

集管和線材:

java.util.logging.Logger apacheWireLog = java.util.logging.Logger.getLogger("org.apache.http.wire");
apacheWireLog.setLevel(java.util.logging.Level.FINEST);

請注意,這必須將java.util.logging 處理程序配置為最佳級別,並且默認處理程序配置為記錄到logcat,默認情況下將過濾DEBUG(最精細)條目。

如果您的系統可以共享Wi-Fi連接,您應該能夠通過系統從任何設備路由數據包,然后使用wireshark,您可以監控您的呼叫或獲取tcpdump。

此外,更重要的是,最好按照@Matthew的建議記錄您的網絡電話和響應

Windows 7 Wi-Fi連接共享: http//www.winsupersite.com/article/faqtip/windows-7-tip-of-the-week-use-wireless-hosted-networking-to-share-an-internet-連接wirelessly.aspx

Stetho是FB的一個很好的工具,可以幫助調試Android應用程序。 您可以訪問本地數據並使用此功能檢查您的網絡。

http://facebook.github.io/stetho/

由於我總是遇到類似的麻煩,似乎很多人一遍又一遍地遇到同樣的問題,我寫了一個快速教程,通過使用netcat和cURL調試客戶端 - 服務器通信

這當然只適用於您在連接端始終“偽造”的簡化情況。

對於竊聽,您可以使用tcpdumpWireshark等工具。 如果您能夠直接在本地計算機上運行服務器實例,那肯定會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM