Java获取 User-Agent介绍

100 篇文章 14 订阅

目录

一、背景:

二、HTTP请求头和响应头注解

三、hutool-all工具

3.1 调用方法

 3.2 实例

四、user-agent-utils工具

4.1 GIT地址

4.2 加入dependency

4.3 实例


一、背景:

        根据 HttpServletRequest获取访问设备信息。

        Http 协议请求头中的 User-Agent属性会将客户端设备的信息传递给服务器,这些信息包括客户端操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

二、HTTP请求头和响应头注解

参数名描述
GetGET请求,GET后面的/代表路径 ?代表参数,HTTP/1.1代表HTTP的版本。传输数据在路径后面。
PostPOST请求,POST后面的/代表路径,HTTP/1.1代表HTTP的版本。传输数据在请求头后面。
Host访问的URL。
Cache-Control缓存控制是否开启缓存。
User-Agent用户浏览器信息。
Accept浏览器能够接受的内容消息。
Accept-Encoding浏览器发给服务器,声明浏览器支持的编码类型。
Accept-Language浏览器所支持的语言类型。
Connection是否开启长链接。close为不长连接,keep-alive保持长连接。
Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这个消息主体中包含一个HTML文档。
Content-Length消息实体的长度,用于消息的分包和粘包处理。
Content-Encoding服务端发从过来的body的格式。
Sec-Fetch-Site请求发起者的来源与目标资源来源之间的关系。
Sec-Fetch-Mode该请求头表明了一个请求的模式。
Sec-Fetch-User取值是一个Bool类型的值,用户是主动还是被动请求,ture是主动,false被动。
Sec-Fetch-Dest表示请求的目的地,即如何使用获取的数据。
sec-ch-ua可以理解用来替代user-agent的,用sec-ch-ua可以防止泄露浏览器详细信息。
sec-ch-ua-mobile是否是移动端用户。
sec-ch-ua-platform表示操作系统名称。
Upgrade-Insecure-Requests请求头向服务器发送一个客户端对HTTPS加密和认证响应良好,在https页面中,如果调用了http资源,那么浏览器就会抛出一些错误。为了改变成这一状况,chrome(谷歌浏览器)会在http请求中加入 'Upgrade-Insecure-Requests: 1' ,服务器收到请求后会返回 "Content-Security-Policy: upgrade-insecure-requests" 头,告诉浏览器,可以把所属本站的所有 http 连接升级为 https 连接。
Cookie就是一段字符串,是浏览器保存服务器返回数据的方法,通常保存用户身份信息。
If-None-Macth服务器接收到附带条件的请求后,只有判断指定条件为假时,才会执行请求。与 If-Match 字段的作用相反。
Pragma消息头指示浏览器不要将响应保存在缓存中,后来用 Cache-Control 替代。
Authorization桌面应用程序也通过HTTP协议跟Web服务器交互, 桌面应用程序一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64算法加密后的字符串放在http request 中的header Authorization中发送给服务端, 这种方式叫HTTP基本认证(Basic Authentication)。
X-Requested-With用于判断客户端请求是那种请求。

| referrer | 是HTTP请求header的报文头,用于指明当前流量的来源参考页面。通过这个信息,我们可以知道访客是怎么来到当前页面的。 |
| X-Client-Data | 谷歌专用,用来追寻使用者问题。 |

三、hutool-all工具

3.1 调用方法

User-Agent中包含很多信息,一下直接打印,根据需要可以自己进行选择。若是获取系统类型,直接执行ua.getPlatform().toString()即可。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.4</version>
</dependency>

 3.2 实例

@GetMapping("print")
public void toPrint(HttpServletRequest requeste){
    System.out.println("--------------------------服务端信息-----------------------------");
    SystemUtil.dumpSystemInfo();
    System.out.println("--------------------------客户端信息-----------------------------");
    UserAgent ua = UserAgentUtil.parse(request.getHeader(Header.USER_AGENT.toString()));
    System.out.println(ua.getPlatform().toString());
    System.out.println(JSONUtil.toJsonStr(ua));
}

四、user-agent-utils工具

4.1 GIT地址

GitHub - HaraldWalker/user-agent-utils: Utilities for processing user-agent strings. Can be used to handle http requests in real-time or to analyze log files.

        可惜的是,已经2018年停止维护了 。如果需要使用该项目,可以自己拉一个分支进行维护。

EOL WARNING
This library has reached end-of-life and will not see regular updates any longer.

Version 1.21 was the last official release in 2018.

Pull request with significant feature changes will not get processed.

If you want to improve this library, fork it and release it yourself.

4.2 加入dependency

        然而客户端设备种类、操作系统及其版本繁多,使得 User-Agent 参数的值也有很多种可能。庆幸的是已经有类库对 User-Agent 的解析做了封装。

<!-- https://mvnrepository.com/artifact/eu.bitwalker/UserAgentUtils -->
        <dependency>
            <groupId>eu.bitwalker</groupId>
            <artifactId>UserAgentUtils</artifactId>
            <version>1.21</version>
        </dependency>

4.3 实例

        在 java 后端项目中可从 HttpServletRequest 中获取 User-Agent 参数值,再借助 UserAgentUtils 工具可以很方便的进行解析。

public static String getDeviceType() {
       // ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String agentString = ServletUtil.getRequest().getHeader("User-Agent");
        UserAgent userAgent = UserAgent.parseUserAgentString(agentString);
        OperatingSystem operatingSystem = userAgent.getOperatingSystem(); // 操作系统信息
        eu.bitwalker.useragentutils.DeviceType deviceType = operatingSystem.getDeviceType(); // 设备类型

        switch (deviceType) {
            case COMPUTER:
                return "PC";
            case TABLET: {
                if (agentString.contains("Android")) return "Android Pad";
                if (agentString.contains("iOS")) return "iPad";
                return "Unknown";
            }
            case MOBILE: {
                if (agentString.contains("Android")) return "Android";
                if (agentString.contains("iOS")) return "IOS";
                return "Unknown";
            }
            default:
                return "Unknown";
        }

    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值