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