如何在安卓应用程序中监控HTTP请求(包括get、post等)

39
在我的应用中,我使用了各种第三方SDK来进行网络调用(HTTP请求)。在不编辑此代码的情况下,我能否在应用程序内部编写单独的代码来拦截应用程序正在进行的所有GET和POST请求?
我想在我的应用程序中记录这些HTTP调用。
我知道可以使用FiddlerCharles代理工具,但这是在应用程序外部,这样做无法记录我的应用程序中的这些HTTP调用。
有没有办法实现它?
编辑:我在我的代码中使用了Google Analytics SDK和Facebook SDK。我想监视这些SDK从我的应用程序中发出的所有网络调用。

1
你想拦截请求还是响应? - Pedro Lobito
请发布您当前测试代码的详细信息或尝试过的示例。此外,请解释为什么需要使用第三方SDK而不是内置方法。 - Tigger
@Tigger - 我在我的代码中使用Google Analytics SDK和Facebook SDK。我想要监控这些SDK从我的应用程序发出的所有网络调用,并可能能够记录/编辑请求/响应。 - atmaish
@PedroLobito - 既包括请求也包括响应。 - atmaish
强制将相应的第三方库通过代理作为步骤1。 - Robert Rowntree
@atmaish,我面临着类似的任务。你找到解决方案了吗? - Shlomi Schwartz
8个回答

10
试试HTTP Toolkit - 这是一个我一直在构建的开源工具,可以完全满足你的需求。它可以自动拦截来自安卓设备的流量,无需手动设置,然后允许你检查和修改来自计算机的所有HTTP流量,就像这样:

Screenshot of the tool with a phone alongside

要拦截您应用程序的HTTPS流量,您只需要在应用程序的网络安全配置中信任“用户”证书(参见https://dev59.com/Ipnga4cB1Zd3GeqPaI7V#38770284),或者使用模拟器或已获取Root权限的设备(在这种情况下,HTTP Toolkit可以注入一个“系统”证书,您的应用程序将自动信任)。

9

在未root的手机上,您可以使用Android操作系统代理来重定向流量。但是,有些应用程序不遵守它,而是直接建立连接。可以进行一些调整。使用Drony并切换到VPN模式将所有流量重定向到SandroProxy。这里有一个视频,介绍如何使用SandroProxy捕获流量:SandroProxy with Chrome devtools。SandroProxy还可以捕获pcap文件,并对pcap流进行SSL中间人攻击。来源于SandroProxy支持团队。


手机需要进行 root 权限吗? - Syamsoul Azrien
请改进这个英文陈述。 - hyperbola

3

如果您需要应用程序能够记录HTTP调用,那么Android Snooper库可能是您正在寻找的解决方案。


3

Charles代理是一种很好的方式。

其他方式包括如果应用程序使用单例网络类(最好这样做),为获取和提交创建一个函数。从您的类中调用这些函数并使用log.d在控制台输出数据。您可以跟踪请求响应或花费的时间。


2
就像我说的那样,我不能使用Charles代理,因为我需要从应用程序中进行操作。此外,不能使用单例类,因为这些调用将由各自的SDK进行。 - atmaish
Charles代理可以配置到应用程序中。 - Karan
我同意,但是我需要的是一些Charles代理服务器的版本(可能是一些SDK),我可以将其放入我的应用程序并分发。这可行吗? - atmaish

2

1

0

如果您已经root设备或正在运行调试(adb),那么这可能会有所帮助:

http://code.tutsplus.com/tutorials/analyzing-android-network-traffic--mobile-10663

否则,我认为您想要做的事情是不可能的。但是您可以监控一般的网络信息,例如:

查看所有流量统计信息:
https://developer.android.com/reference/android/net/TrafficStats.html (只需传入您应用程序的用户ID)

监控网络状态:
https://developer.android.com/reference/android/net/ConnectivityManager.html


0

你可以使用这个作为更好的选择。记得向下滚动应用程序并检查网络拦截是否开启。 链接在这里 https://appetize.io/upload


请在回答正文中提供更多细节,而不要依赖外部链接,因为它们可能会失效。 - Alan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接