Java(android)通过请求头(User-Agent)获取浏览器类型,操作系统类型,手机机型

声明:

1.User-Agent是可以伪造的

2.User-Agent中含有操作系统和版本信息

3.在CSDN看见几位的博客,感觉不是很完善,刚好项目上用到,引用几位兄弟的博客,自己进一步完善。


import javax.servlet.http.HttpServletRequest;

import nl.bitwalker.useragentutils.Browser;
import nl.bitwalker.useragentutils.OperatingSystem;
import nl.bitwalker.useragentutils.UserAgent;

public class UserAgentUtil {  
	
    public static String android="Android";  
    public static String iphone="iPhone";  
    public static String ipad="iPad";
    public static String noDevice="未知设备";
    
    //获取用户UA信息
    public static String getUaInfo(HttpServletRequest request){
    	
    	if(null == request) return "";
    	return request.getHeader("User-Agent");
    }   
    
    //获取用户Browser信息
    public static String getBrowser(String ua){
    	
    	if(null == ua) return "";
    	UserAgent userAgent = UserAgent.parseUserAgentString(ua);
    	Browser browser = userAgent.getBrowser();
    	return browser.toString();
    }
    
    //获取用户os信息
    public static String getOS(String ua){
    	
    	if(null == ua) return noDevice;
    	UserAgent userAgent = UserAgent.parseUserAgentString(ua);
    	OperatingSystem os = userAgent.getOperatingSystem();
    	return os.toString();
    }
    
    //获取移动用户操作系统  
    public static String getMobileOS(String userAgent){  
        if (userAgent.contains(android)) {  
            return android;  
        }else if (userAgent.contains(iphone)){  
            return iphone;  
        }else if (userAgent.contains(ipad)){  
            return ipad;  
        }else {  
            return "others";
        }  
    }  
    
    //获取用户手机型号  
    public static String getPhoneModel(String userAgent){
    	
    	if(null == userAgent || "" == userAgent) return noDevice;
    	
        String OS=UserAgentUtil.getMobileOS(userAgent);   
        if (OS.equals(android)) {  
            String rex="[()]+";  
            String[] str=userAgent.split(rex);  
            str = str[1].split("[;]");  
            String[] res=str[str.length-1].split("Build/");  
            return res[0];  
        }else if (OS.equals(iphone)) {  
            String[] str=userAgent.split("[()]+");  
            String res="iphone"+str[1].split("OS")[1].split("like")[0];  
            return res;  
        }else if (OS.equals(ipad)) {  
            return ipad;  
        }else {  
            return getOS(userAgent);  
        }  
  
  
    }  
  
}  


下载UserAgentUtils.jar


常见userAgent信息链


引用文章

### 如何用 Java 模拟浏览器 HTTP 请求并获取 User-AgentJava 中,可以通过 `HttpURLConnection` 或第三方库(如 Apache HttpClient 或 OkHttp)来模拟浏览器发起 HTTP 请求,并设置请求头中的 `User-Agent` 字段以伪装成特定的浏览器[^1]。 以下是使用标准库 `HttpURLConnection` 的示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpExample { public static void main(String[] args) { try { URL url = new URL("https://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为 GET connection.setRequestMethod("GET"); // 设置 User-Agent 头部字段,伪装成 Google Chrome 浏览器 connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder content = new StringBuilder(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } in.close(); // 输出响应内容 System.out.println(content.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何通过 `setRequestProperty` 方法设置 `User-Agent` 值,从而让服务器认为该请求来自指定版本的 Google Chrome 浏览器。这有助于绕过某些网站对爬虫或自动化工具的检测机制。 如果需要从客户端接收请求并提取其 `User-Agent`,可以使用 Servlet API 提供的方法 `getHeader()` 来实现[^2]。例如,在 Java Web 应用程序中处理 HTTP 请求时,可通过以下方式读取 `User-Agent`: ```java String userAgent = request.getHeader("User-Agent"); System.out.println("Client's User-Agent: " + userAgent); ``` 此代码片段适用于基于 Servlet 技术开发的服务端应用程序,能够帮助开发者识别访问者的设备类型操作系统以及具体使用的浏览器版本等信息。 --- ####
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值