• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java后端获取接口访问端是PC还是手机

武飞扬头像
半砂
帮助1

1测试用代码

项目中遇到的, 公司的开发不是前后端分离的模式, html页面是后端返回的, 所以页面需要根据客户端是PC还是手机调整布局;
试了一下在后端获取客户端类型, 方法是用请求报文里的 headers中的 user-agent 信息;
起初也不知道, 于是做了以下试验代码

@GetMapping(value = "/test")
public ModelAndView CheckLoginForModuleUse(HttpServletRequest req){

    System.out.println("=======================访问端信息=======================");
    
    Enumeration<String> headerNames = req.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String key = headerNames.nextElement();
        System.out.print(key);
        System.out.print("=");
        System.out.println(req.getHeader(key));
    }
    
    System.out.println("=======================END=======================");
    
}
学新通

2 收集到的日志

部署并尝试用多种客户端访问后, 有以下日志产生, 本次使用的客户端有:
1 谷歌浏览器 windows
2 Edge浏览器 windows
3 iPhone手机App, (App是客户的app, 在app内部访问接口)
4 Android手机App
5 PC端App
比较遗憾没有 macbook 试试;

eg.1 明显这个客户端是 iphone14

=======================访问端信息=======================
host=abc.def.com.cn
accept=text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
upgrade-insecure-requests=1
cookie=cookiesession1=678B28FB01234ABCDEFGHIJKLMNO798D
user-agent=Qing/0.9.91;iOS 15.5;Apple;iPhone14,4;deviceId:354a8216-d7b0-41f8-9c74-50ea4771c68e;deviceName:iPhone (4);clientId:38881;os:iOS 15.5;brand:Apple;model:iPhone14,4;oem:bgy;lang:zh-CN;fontNum:0;Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;redVer:1.0;V9BridgeProtocalNoDoubleSlash;ver:1.0.21;
accept-language=zh-CN
accept-encoding=gzip, deflate
connection=keep-alive
=======================END=======================

eg.2 iphone14

=======================访问端信息=======================
host=abc.def.com.cn
accept=text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
upgrade-insecure-requests=1
cookie=JSESSIONID=2E49BEB3B58920C94C057B74F595FDF6; dluinfoforsec=8PdlRxrxgqzc8 CJUTqV4T69qFarxTwudltN6pNW6M8r7Y HNzfi262B8JEkzGH0; cookiesession1=678B28FB01234ABCDEFGHIJKLMNO798D
user-agent=Qing/0.9.91;iOS 15.5;Apple;iPhone14,4;deviceId:354a8216-d7b0-41f8-9c74-50ea4771c68e;deviceName:iPhone (4);clientId:38881;os:iOS 15.5;brand:Apple;model:iPhone14,4;oem:bgy;lang:zh-CN;fontNum:0;Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;redVer:1.0;V9BridgeProtocalNoDoubleSlash;ver:1.0.21;
accept-language=zh-CN
accept-encoding=gzip, deflate
connection=keep-alive
=======================END=======================

eg.3 iphone10

=======================访问端信息=======================
host=abc.def.com.cn
accept=text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
upgrade-insecure-requests=1
user-agent=Qing/0.9.91;iOS 13.6.1;Apple;iPhone10,1;deviceId:a84d5a21-b419-4e97-8fbf-7adedf439687;deviceName:The Mountain Echoes;clientId:38881;os:iOS 13.6.1;brand:Apple;model:iPhone10,1;oem:bgy;lang:zh-CN;fontNum:0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;redVer:1.0;V9BridgeProtocalNoDoubleSlash;ver:1.0.21;
accept-language=zh-CN
accept-encoding=gzip, deflate
connection=keep-alive
x-forwarded-for=144.0.23.4
x-real-ip=144.0.23.4
x-forwarded-proto=http
=======================END=======================

eg.4 Android

=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Qing/0.9.86;Android 10.1.8;OPPO;PEDM00;deviceId:80fa56ba-540f-33a8-bdcc-adea579cbf8b;deviceName:OPPO PEDM00;clientId:10201;;os:Android 10.1.8;brand:OPPO;model:PEDM00;lang:zh-CN;ver:1.0.11;redVer:1.0;Mozilla/5.0 (Linux; Android 12; PEDM00 Build/RKQ1.211103.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.98 Mobile Safari/537.36
accept=text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
x-requested-with=cn.com.happypace.dom1
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
cookie=JSESSIONID=A8C16AA7DD65694338DF1D7E84530A51; ASP.NET_SessionId=k3wpql1rj4ifx4nrabo4bgux; dluinfoforsec=8PdlRxrxgqzc8 CJUTqV4T69qFarxTwudltN6pNW6M8r7Y HNzfi262B8JEkzGH0
x-forwarded-for=223.104.69.30
x-real-ip=223.104.69.30
x-forwarded-proto=http
=======================END=======================

eg.5 有Chrome字样, 分不清是 chrome 还是 edge

=======================访问端信息=======================
host=10.10.166.37
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
accept=text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9
cookie=userInfo=YWRtaW58YWQxYTE5OTEtMzY4Mi00MDUzLWJiNDYtYTg5MGM1Mjk4NmZlfHRydWU=; JSESSIONID=D3093E40172B09AF138EE6A729EE653C; dlcurbigdeptid=dlwwr; dluinfoforchangeuser=48vmoGkU7M78j2IOOsDD1A==; dluinfoforsec=hCdwq8mRUhOZMaTsxXxB/RZCsLjdOYUudTueNHq3/AwdBdHDeq7 gtiuzXEUVjZj
=======================END=======================

eg.6 有Chrome字样, 分不清是 chrome 还是 edge

=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
accept=text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9
cookie=userInfo=YWRtaW58YWQxYTE5OTEtMzY4Mi00MDUzLWJiNDYtYTg5MGM1Mjk4NmZlfHRydWU=; JSESSIONID=A596B4209B9DFCD1726C1224ED8F6FC1; Hm_lvt_5c138214afe064d1f739fb9535e08b20=1646808109; dlcurbigdeptid=dlwwr; dluinfoforchangeuser=48vmoGkU7M78j2IOOsDD1A==; dluinfoforsec=hCdwq8mRUhOZMaTsxXxB/RZCsLjdOYUudTueNHq3/AwdBdHDeq7 gtiuzXEUVjZj
x-forwarded-for=144.0.23.4
x-real-ip=144.0.23.4
x-forwarded-proto=http
=======================END=======================

eg.7 有Chrome字样, 分不清是 chrome 还是 edge

=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.26
accept=text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
x-forwarded-for=144.0.23.4
x-real-ip=144.0.23.4
x-forwarded-proto=http
=======================END=======================

eg.8 有Chrome字样, 分不清是 chrome 还是 edge

=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
accept=text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9
cookie=JSESSIONID=C2546DAF8A563BB96F49BF8F787EB904; dlcurbigdeptid=dlwwr; dluinfoforchangeuser=48vmoGkU7M78j2IOOsDD1A==; dluinfoforsec=8PdlRxrxgqzc8 CJUTqV4T69qFarxTwudltN6pNW6M8r7Y HNzfi262B8JEkzGH0
=======================END=======================

3 结论

经分析, 移动端的 user-agent 信息中都含有 Mobile 字样, 其中安卓机还带有 Android 字样, 苹果机带有 iPhone 字样;
最初分析的时候并没有注意到这个独有的 Mobile 字样, 所以我的代码是这样实现的

@GetMapping(value = "/test")
public ModelAndView CheckLoginForModuleUse(HttpServletRequest req){
    String url = "xxxx";
    String userAgent = req.getHeader("user-agent");
    if (userAgent != null) {
        userAgent = userAgent.toLowerCase();
        if (userAgent.contains("android") || userAgent.contains("iphone")) {
            // url中带上参数cusotmer=2标识类型, 页面html中已经做了处理, 自动根据customer的值调整布局
            url  = "&cusotmer=2";
        }
    }
}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgacbea
系列文章
更多 icon
同类精品
更多 icon
继续加载