Android开发如何检查应用发出的HTTP(S)请求头?
针对WebView+Cronet链路的请求头调试可行方案
- 方案1:Cronet请求链路内置日志埋点(优先推荐,无外部依赖,数据100%准确)
你所有真实请求都是在ShouldInterceptRequest拦截后通过Cronet手动发起的,直接在Cronet请求层做埋点即可,完全绕开WebView调试限制、代理证书问题、IDE工具适配问题:
构建CronetEngine时注册全局请求完成监听器,就能拿到全量真实请求、响应数据,示例代码:
如果使用的Cronet版本较低没有提供全量头查询API,直接在你组装请求、调用val cronetEngine = CronetEngine.Builder(applicationContext) .addRequestFinishedListener { requestInfo, responseInfo, error -> Log.d("CronetReqLog", "=== Request: ${requestInfo.method} ${requestInfo.url} ===") // 打印所有真实发送的请求头 requestInfo.allHeaders.forEach { (headerKey, headerValues) -> Log.d("CronetReqLog", "Req Header: $headerKey = ${headerValues.joinToString(";")}") } // 打印响应信息和响应头 responseInfo?.let { Log.d("CronetReqLog", "=== Response: ${it.statusCode} ===") it.allHeaders.forEach { (headerKey, headerValues) -> Log.d("CronetReqLog", "Resp Header: $headerKey = ${headerValues.joinToString(";")}") } } error?.let { Log.e("CronetReqLog", "=== Request failed ===", it) } } // 保留原有Cronet配置 .build()addHeader方法添加头的位置同步打印日志,在响应回调位置遍历打印响应头即可,没有任何适配成本,拿到的就是实际发出去的真实数据,不会出现临时头、展示头和实际发送头不一致的问题。 - 方案2:配置debug包信任用户证书,解决代理抓包证书校验失败问题
Fiddler、HTTP Toolkit抓包失败核心是Android 7及以上版本默认不信任用户手动安装的CA证书,针对debug包单独配置信任规则即可,该配置仅对debug构建生效,不会影响线上版本安全:- 在项目
res/xml目录下新建network_security_config.xml文件:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="system" /> <!-- 信任用户安装的CA证书,即抓包工具生成的根证书 --> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>- 在
AndroidManifest.xml的application标签下添加属性:android:networkSecurityConfig="@xml/network_security_config" - 如果你的Cronet请求配置了SSL Pinning,debug版本临时关闭该逻辑即可。配置完成后正常设置系统代理走抓包工具,就能看到所有Cronet发出的请求完整内容。
- 在项目
- 方案3:适配Cronet到Chrome调试面板
之前Chrome Inspect只能看到WebView的原始provisional请求,是因为默认调试能力没有接入Cronet的请求链路,给Cronet添加对应的调试拦截器后,所有Cronet发出的真实请求会自动同步到PC端Chrome的Network面板中,你原来的调试流程不需要改动,就能像看普通网页请求一样查看头、响应体、请求时序等信息。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

