如何在Android设备上调试http调用?

时间:2011-03-06 22:16:43

标签: android debugging

我正在为Android编写一个Lovefilm客户端,并且它不会太糟糕,除非我一直遇到远程调用从API检索数据的问题。

有没有人有调试远程调用的提示?我可以在Android上使用tcpdump,还是以原生的方式进行操作?

例如,我正在使用用于OAuth的Scribe-java库来访问Lovefilm API,我可以在设备运行Gingerbread时验证查找并检索用户帐户上的电影列表,但是尝试检索Froyo上的accessToken导致空白响应&并且明显的响应代码为-1,我希望能够看到它们下面发生了什么。

另一个我想能够使用原始http的例子是尝试运行搜索,我得到并且IOError说“收到的身份验证质询为空

5 个答案:

答案 0 :(得分:3)

在这些情况下,我使用了Fiddler(用于调试http调用的http-proxy)和android模拟器。只需启动代理,然后使用正确的代理地址启动模拟器(-http-proxy)。

答案 1 :(得分:3)

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);

Headers&丝:

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

请注意,必须将java.util.logging Handler配置为最佳级别,并将默认处理程序配置为记录到logcat,默认情况下将过滤DEBUG(最精细)条目。

答案 2 :(得分:1)

如果您的系统可以共享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-connection-wirelessly.aspx

答案 3 :(得分:0)

由于我总是遇到类似的麻烦,似乎很多人一遍又一遍地遇到同样的问题,我写了一个快速tutorial for debugging client-server communication by using netcat and cURL

当然,这仅适用于您在连接方面始终“伪造”的简化案例。

对于窃听,您可以使用tcpdumpWireshark等工具。如果您能够直接在本地计算机上运行服务器实例,那肯定会更容易。

答案 4 :(得分:0)

Stetho是FB的一个很棒的工具,可以帮助调试Android应用程序。您可以访问本地数据并使用此功能检查您的网络。

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