Play framework (Websocket):从请求头获取浏览器信息



我使用这个例子中的代码来获取客户端的浏览器信息。但是键user-agent只适用于Firefox,对于我来说,没有这个键适用于Chrome或Safari。所以,我得到None对象Chrome或Safari。任何人都可以提供一种通用的方式来获取信息,如浏览器名称,版本等发挥!控制器吗?

更新

我使用Websocket协议,而不是http(尽管它们在许多方面相似),我使用Play 2.1.0(使用Java 1.7.0_17和Scala 2.10.0)。我的代码就像def actorWebSocket = WebSocket.async[String] { implicit request => ...,从http://websocket.org/echo.html向我的服务器发送请求。(我测试过的所有浏览器都支持websocket)。虽然简单的http请求确实显示了Firefox, Safari和Chrome的User-Agent,但它是websocket未能显示Safari和Chrome的User-Agent。@nico_ekito和@le_douard认为这可能是浏览器的问题

实际上play框架给了我们一切(甚至很多知道头的名字)。这是控制器类的静态函数

中的代码
public class Application extends Controller {
    public static Result index() {
        String userAgent = request().headers().get(Http.HeaderNames.USER_AGENT);
        return ok(userAgent);
    }
}

我自然认为你指的是路由文件中的routes. application .index()。

如果您还想知道如何解析用户代理,我还建议您查看:
https://code.google.com/p/user-agent-utils/

我在6个月前的一个项目中使用了它,我不知道它是如何更新的,但当我需要它来获取更有用和可读的信息时,它对我来说非常有用。

一些浏览器没有完全实现WebSockets协议应该有的

毕竟这是一个仍在定义/开发中的协议。

对于chrome,这是一个有票的bughttps://code.google.com/p/chromium/issues/detail?id=128170

显然它最近已经修复,应该很快推出?我想Safari也是一样的

AFAIK,它在我的应用程序中使用"User-Agent"键:

request.headers.get("User-Agent")

在我的play 2.0.4项目的lib目录中有UserAgentUtils-1.6.jar,我一直以这种方式使用user-agent,例如识别iPhone模拟器调用:在控制器的顶部:

import nl.bitwalker.useragentutils.UserAgent;

和方法中的

    UserAgent userAgent = UserAgent.parseUserAgentString(Http.Context.current().request().getHeader("User-Agent"));
        Boolean iphone_l = false;
        if (userAgent.getOperatingSystem().equals("MAC_OS_X") &&
            userAgent.getOperatingSystem().getManufacturer().equals("APPLE") &&
            userAgent.getOperatingSystem().getGroup().equals("MAC_OS_X") &&
            userAgent.getOperatingSystem().getDeviceType().equals("COMPUTER") &&
            userAgent.getBrowser().equals("CFNETWORK") &&
            userAgent.getBrowser().getGroup().equals("CFNETWORK") &&
            userAgent.getBrowser().getManufacturer().equals("CFNETWORK")) {
            iphone_l = true;
        }

…工作良好,即使在Chrome(未尝试IE),但崩溃,如果请求来自Excel表格与wininet.dll的http请求。

这段代码为我工作:

String agent = request().getHeader(Http.HeaderNames.USER_AGENT);

相关内容

  • 没有找到相关文章

最新更新