You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Nougat及以上版本BrowserMobProxy无法捕获请求求助

BrowserMobProxy无法捕获Android 7+请求的解决方案

我之前也碰到过一模一样的问题——BrowserMobProxy在Android 6及以下能正常抓请求生成HAR,但到了Android 7+就只生成空的HAR或者抓不到目标请求。这主要是Android 7.0引入的网络安全策略变更导致的,再加上一些代理配置的细节没做好,我来给你一步步解决:

核心原因

Android 7.0开始,默认情况下APP会忽略用户安装的CA证书,只信任系统预装的证书。而BrowserMobProxy需要通过自己生成的CA证书解密HTTPS请求,所以如果设备不信任这个证书,APP的HTTPS流量就会绕过代理,自然抓不到。

具体解决步骤

1. 让Android设备信任BrowserMobProxy的CA证书

方式一:安装为系统证书(推荐,无需修改APP)

  • 首先找到BrowserMobProxy生成的CA证书,默认路径:
    • Mac/Linux:~/.browsermob-proxy/ca-certificate-rsa.cer
    • Windows:C:\Users\<你的用户名>\.browsermob-proxy\ca-certificate-rsa.cer
  • 将证书文件传到Android设备(比如通过微信、QQ或者ADB推送)
  • 打开设备的设置 > 安全 > 加密与凭据 > 从存储设备安装,找到证书文件,按照提示完成安装。注意有些设备需要Root权限才能安装到系统证书目录,如果没有Root,就用下面的方式二。

方式二:修改APP的网络安全配置(适用于自研APP或无法Root的设备)

  • 在APP的res/xml目录下创建network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <!-- 允许信任用户安装的证书 -->
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>
  • 打开AndroidManifest.xml,在<application>标签中添加配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">

2. 修正BrowserMobProxy的代码配置

你提供的代码里有个明显的问题:BrowserMobProxy server;没有初始化,会导致空指针异常。另外要确保开启HTTPS解密,修正后的核心代码如下:

public BrowserMobProxyBaseClass bmProxy = new BrowserMobProxyBaseClass();
// 初始化代理实例
private BrowserMobProxy server;

public void setUp() {
    try {
        server = new BrowserMobProxyServer();
        // 开启HTTPS解密,信任所有服务器
        server.setTrustAllServers(true);
        // 启动代理,指定端口(比如8080)
        server.start(8080);
        // 导出CA证书(方便安装到设备)
        File certFile = new File("bmp-ca.cer");
        server.getCaRootCertificate().saveAs(certFile);
        
        bmProxy.proxyStart(); // 如果你的BaseClass里有其他配置,确保和这里不冲突
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public Map<String, String> getAnalyticsKeyValue() throws Exception {
    Map<String, String> keyValue = new HashMap<String, String>();
    
    // 确保server已经初始化并启动
    if (server == null || !server.isRunning()) {
        throw new IllegalStateException("Proxy server is not running!");
    }
    
    Har har = server.getHar();
    String strFilePath = "Selenium_test.har";
    FileOutputStream fos = new FileOutputStream(strFilePath, false);
    har.writeTo(fos);
    fos.close(); // 记得关闭流
    
    HarLog log = har.getLog();
    List<HarEntry> entries = log.getEntries();
    
    for (int i = entries.size() - 1; i >= 0; i--) {
        HarEntry entry = entries.get(i);
        System.out.println(entry.getRequest().getUrl());
        if (entry.getRequest().getUrl().contains("ResponseTargetName")) {
            HarPostData postData = entry.getRequest().getPostData();
            // 先判断postData是否为空,避免空指针
            if (postData != null) {
                List<HarPostDataParam> listpost = postData.getParams();
                for (HarPostDataParam pair : listpost) {
                    if (pair.getValue() != null) {
                        keyValue.put(pair.getName(), pair.getValue());
                        System.out.println("key : " + pair.getName() + " Value : " + pair.getValue());
                    }
                }
            }
            break;
        }
    }
    return keyValue;
}

public void tearDownProxy() throws Exception {
    if (server != null && server.isRunning()) {
        server.stop();
    }
    bmProxy.stopProxy();
    driver.quit();
    new HtmlLogger().createHtmlAnalyticsLogFile(result);
}

3. 验证设备代理配置

  • 确保Android设备和运行代理的电脑在同一个局域网
  • 在设备的Wi-Fi设置中,手动设置代理为电脑的IP地址,端口为你在代码中指定的8080(或者其他端口)
  • 测试设备能否正常访问网络,如果不能,检查防火墙是否拦截了代理端口

额外排查要点

  • 如果HTTP请求能抓到,但HTTPS抓不到,100%是证书信任的问题,回到步骤1重新检查
  • 查看BrowserMobProxy的日志,有没有证书相关的报错信息,可以通过server.setLogLevel(Level.DEBUG);开启 debug 日志
  • 确保你的依赖版本是最新的(你用的2.1.5是比较旧的版本,可以试试升级到2.1.6或者更高版本)

内容的提问来源于stack exchange,提问作者Vikas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:16