如何判断一个HTTP请求是浏览器请求还是应用程序请求?

2025-09-29 07:01:17
admin

打开F12并刷新浏览器页面,可以从Request Headers中获取请求头Header信息,一般会有如下几项信息: Accept: / Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Content-Length: 716 Content-Type: text/plain;charset=UTF-8 Host: report.csdn.net:4089 Origin: https://bbs.csdn.net Referer: https://bbs.csdn.net/topics/380250315 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

比如我们浏览器请求头会附带User-Agent属性,内容以Mozilla开头。因此我们可以利用下列代码块简单区分HTTP请求是来自浏览器还是应用程序。 请注意,网络爬虫或其它软件比如黄牛抢票小程序会模拟这个信息,所以仅从Request Header属性无法绝对实现区分请求是来自浏览器还是应用程序。

简易模拟浏览器请求 在HTTP Request中设置User-Agent请求头消息: httpGet.setHeader(“User-Agent”, “Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0”); // 设置请求头消息User-Agent https://blog.csdn.net/u013215018/article/details/55045392

CloseableHttpClient httpClient=HttpClients.createDefault(); // 创建httpClient实例

HttpGet httpGet=new HttpGet("http://www.tuicool.com/"); // 创建httpget实例

httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); // 设置请求头消息User-Agent

CloseableHttpResponse response=httpClient.execute(httpGet); // 执行http get请求

HttpEntity entity=response.getEntity(); // 获取返回实体

System.out.println("网页内容:"+EntityUtils.toString(entity, "utf-8")); // 获取网页内容

response.close();

httpClient.close();

简易区分HTTP请求是来自浏览器还是应用程序 1、获取请求的HttpServletRequest

HttpServletRequest httpServletRequest=ServletActionContext.getRequest();

2、拦截器中判断Request Header属性

String remoteAddr = httpServletRequest.getRemoteAddr();

if (httpServletRequest.getHeader(“User-Agent”).startsWith(“Mozilla”)) {

LOGGER.debug("remote request from browser, remote addr:{}.", remoteAddr);

} else {

LOGGER.debug("remote request from application, remote addr:{}.", remoteAddr);

httpServletRequest.setAttribute(“solr.security.skip.cas”, "true");

}

有篇博客中提到可以通过Request Header中得“Content-Type”和“Accept”两个属性来判断请求是来自浏览器还是应用程序。但是要注意的是,这个判断逻辑不一定适用于任何网站,比如CSDN论坛的Request Header和Response Header都包含了Content-Type属性,通过这种方法可能会导致误判。

其实Request Header的属性在应用程序的代码里面都是可以手动添加的,所以仅仅是判断Header里面的任何属性,都是容易被模仿的。 换个说法,如果这种在Request Header添加一两个属性就能轻易判断HTTP请求是来自浏览器还是应用程序方法就能work,那么你也太小瞧12306防范抢票软件的研发部门了! 如果有那么简单就能区分,哪还需要什么奇葩百出的验证码呢~~ 附上彩蛋1 附上彩蛋2 附上彩蛋3

Copyright © 2088 疾空激战活动站_射击游戏专题_枪械测评 All Rights Reserved.
友情链接