【发布时间】:2014-06-26 23:25:10
【问题描述】:
我正在尝试获取有关用户用于调用 API 的浏览器的信息。 我在网上搜索了一下,好像应该使用请求头中的“user-agent”。
代码:
@RequestMapping(value = "/headerTest", method = RequestMethod.GET)
public @ResponseBody DummyAPI dummyApi(
@RequestHeader ("User-Agent") String userAgent,
HttpServletRequest request, HttpServletResponse response)
{
System.out.println("User-Agent : " + userAgent);
String browserName = request.getHeader("User-Agent");
System.out.println("BrowserName : " + browserName);
return "test";
}
但是,当我测试它时:
Firefox 给了我: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0!
Chrome 给了我: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36!
Safari 给我: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4!
这可能是什么问题?为什么标题会出错?
提前谢谢你!
【问题讨论】:
-
你是否运行了一些插件来改变你的用户代理来欺骗它,却忘了你做了?用户代理由浏览器发送。如果 Java 出错了,那是因为浏览器发送错误。
-
我认为这些用户代理字符串是真的,我在whatsmyuseragent.com 上检查了我的(我在 Windows 8.1 上使用 Chrome 35)我的用户代理似乎与您的 Chrome 用户代理非常相似(除了操作系统部分)字符串
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36。所以,不要被所有这些 Mozilla-Safari 单词等弄糊涂了。 -
这是正确的,用户代理将向您提供有关浏览器的信息,其中包括的不仅仅是浏览器的名称。您可以使用
userAgent.contains("Firefox")之类的内容搜索此用户代理字符串以检查您要查找的浏览器名称。
标签: java spring google-chrome firefox servlets