当前位置:   article > 正文

判断http 请求来自于手机还是PC_http请求识别网页还是手机

http请求识别网页还是手机

首先收集了部分客户端请求头部信息如下

iPhone微信:
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B440 MicroMessenger/6.2.4 NetType/WIFI Language/en

iPhone—safari
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4

 

Android-Chrome

User-Agent:Mozilla/5.0 (Linux; Android 4.4.4; HTC D820u Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36


PC-Chrome
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36

PC-Firefox
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0

PC-IE
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

 

我们需要判断Http请求是来自手机端还是电脑端,关键是取得User-Agent的信息,进行筛选判断即可。


  1. public static boolean isMobileDevice(String requestHeader){
  2. /**
  3. * android : 所有android设备
  4. * mac os : iphone ipad
  5. * windows phone:Nokia等windows系统的手机
  6. */
  7. String[] deviceArray = new String[]{"android","mac os","windows phone"};
  8. if(requestHeader == null)
  9. return false;
  10. requestHeader = requestHeader.toLowerCase();
  11. for(int i=0;i<deviceArray.length;i++){
  12. if(requestHeader.indexOf(deviceArray[i])>0){
  13. return true;
  14. }
  15. }
  16. return false;
  17. }

在controller中获取http头信息如下:

  1. String requestHeader = request.getHeader("user-agent");
  2. if(JudgeRequestDeviceUtil.isMobileDevice(requestHeader)){
  3. logger.debug("使用手机浏览器");
  4. }else{
  5. logger.debug("使用web浏览器");
  6. }

php: 判断是不是微信客户端的请求
  1. function is_in_wx(){
  2. $user_agent = $_SERVER['HTTP_USER_AGENT'];
  3. return false!=strpos($user_agent, 'MicroMessenger');
  4. }

php: 判断是不是手机的请求
  1. function is_mobile_visit()
  2. {
  3. // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  4. if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
  5. {
  6. return true;
  7. }
  8. // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  9. if (isset ($_SERVER['HTTP_VIA']))
  10. {
  11. // 找不到为flase,否则为true
  12. return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
  13. }
  14. // 脑残法,判断手机发送的客户端标志,兼容性有待提高
  15. if (isset ($_SERVER['HTTP_USER_AGENT']))
  16. {
  17. $clientkeywords = array ('nokia',
  18. 'sony',
  19. 'ericsson',
  20. 'mot',
  21. 'samsung',
  22. 'htc',
  23. 'sgh',
  24. 'lg',
  25. 'sharp',
  26. 'sie-',
  27. 'philips',
  28. 'panasonic',
  29. 'alcatel',
  30. 'lenovo',
  31. 'iphone',
  32. 'ipod',
  33. 'blackberry',
  34. 'meizu',
  35. 'android',
  36. 'netfront',
  37. 'symbian',
  38. 'ucweb',
  39. 'windowsce',
  40. 'palm',
  41. 'operamini',
  42. 'operamobi',
  43. 'openwave',
  44. 'nexusone',
  45. 'cldc',
  46. 'midp',
  47. 'wap',
  48. 'mobile'
  49. );
  50. // 从HTTP_USER_AGENT中查找手机浏览器的关键字
  51. if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
  52. {
  53. return true;
  54. }
  55. }
  56. // 协议法,因为有可能不准确,放到最后判断
  57. if (isset ($_SERVER['HTTP_ACCEPT']))
  58. {
  59. // 如果只支持wml并且不支持html那一定是移动设备
  60. // 如果支持wml和html但是wml在html之前则是移动设备
  61. if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
  62. {
  63. return true;
  64. }
  65. }
  66. return false;
  67. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/704923
推荐阅读
相关标签
  

闽ICP备14008679号