有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用户代理Java Chromium Embedded 3(JCEF3)移动版本仿真

我想使用jcef3编写java应用程序,并将其模拟为移动浏览器

我有这样的想法:

    @Override
    public boolean onBeforeResourceLoad(CefBrowser cefBrowser, CefRequest cefRequest) {
        Map<String, String> headerMap = new HashMap<String, String>();
        Map<String, String> newHeaderMap = new HashMap<String, String>();

        cefRequest.getHeaderMap(headerMap);

        for (Map.Entry<String, String> entry : headerMap.entrySet())
        {
            if (entry.getKey().equals("User-Agent")) {
                newHeaderMap.put(entry.getKey(), "Mozilla/5.0 (Linux; Android 4.3; GT-I9300 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36");
            } else {
                newHeaderMap.put(entry.getKey(), entry.getValue());
            }
        }

        cefRequest.setHeaderMap(newHeaderMap);

        return false;
    }

问题在于,我想像mobile detect一样浏览一个页面,这是一个奇怪的操作系统:),我不知道为什么。如果我下载一些类似chrome的用户代理切换器插件,并使用相同的UA,那么一切都没问题,所以我确信该页面使用用户代理验证

知道吗


共 (1) 个答案

  1. # 1 楼答案

    我解决了这个问题

    通常有两种方法来检测浏览器。 第一个是请求头。我的示例代码展示了如何做到这一点。 第二个是javascript navigator属性。这就是问题所在。请求使用正确的userAgent发送,但使用javascript navigator。userAgent显示错误的用户代理版本,该版本与在请求头中发送的版本不同。 要正确做到这一点,您应该重写javascript navigator。用户代理变量。 在CEF3中,注入一些javascript代码来覆盖它是没有问题的