我正在为Android编写一个Lovefilm客户端,并且它不会太糟糕,除非我一直遇到远程调用从API检索数据的问题。
有没有人有调试远程调用的提示?我可以在Android上使用tcpdump,还是以原生的方式进行操作?
例如,我正在使用用于OAuth的Scribe-java库来访问Lovefilm API,我可以在设备运行Gingerbread时验证查找并检索用户帐户上的电影列表,但是尝试检索Froyo上的accessToken导致空白响应&并且明显的响应代码为-1,我希望能够看到它们下面发生了什么。
另一个我想能够使用原始http的例子是尝试运行搜索,我得到并且IOError说“收到的身份验证质询为空”
答案 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。
当然,这仅适用于您在连接方面始终“伪造”的简化案例。
对于窃听,您可以使用tcpdump或Wireshark等工具。如果您能够直接在本地计算机上运行服务器实例,那肯定会更容易。
答案 4 :(得分:0)
Stetho是FB的一个很棒的工具,可以帮助调试Android应用程序。您可以访问本地数据并使用此功能检查您的网络。