如何检测网站访问年龄限制?技术实现方案问询
问题
问题背景
目前我的应用已具备检测页面/资料是否存在、链接能否访问的功能。现需打造更安全的程序,新增目标平台年龄限制检测功能,避免引导用户访问含不当内容的平台。
当前问题
我尝试使用BufferedReader逐行读取页面内容,查找年龄限制相关标识,但该方法不可靠且效率低下,无法实现预期效果。
相关代码
//Link Validation public static boolean checkAbilityToCreate(String link) { if (link.startsWith("http://") || link.startsWith("https://") && !link.equals("https://example.com")) { Pattern emailPattern = Pattern.compile ("([\\w.-]+)\\.([\\w .-]){2,}/(.+)"); String checkOn = link.split("//")[1]; Matcher matcher = emailPattern.matcher(checkOn); if (matcher.find()) { try { URI uri = new URI(link); URL url = uri.toURL(); } catch (Exception e) { return false; } return valid_Hyper_Text_Transfer_Protocol(link); } } return false; } private static boolean valid_Hyper_Text_Transfer_Protocol(String httpToCheck) { try { URL url = new URL(httpToCheck); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { return ContentValidator.isValidContent(connection); } } catch (IOException e) { //TODO - handle } return false; } private static class ContentValidator { public static boolean isValidContent(HttpURLConnection connection) { try { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder content = new StringBuilder(); String dummy = ""; while ((dummy = in.readLine()) != null) { content.append(dummy); if (content.toString().contains("page isn't available") || content.toString().contains("page not found")) { return false; } //another if statement that was looking in the content for age //restrictions } in.close(); return true; } catch (IOException e) { return false; } } }
上述代码为链接验证逻辑,原isValidContent方法中用于检测年龄限制的标识判断逻辑已移除,因无法解决问题。
需求
希望获取可实现该年龄限制检测功能的建议或相关文档支持。
补充细节
- 无报错信息,仅功能无法实现;
- 逐行读取页面内容无法得到正确结果,年龄限制识别模式大多失效;
- 使用指定限制的自定义测试文件可正常工作。
解决方案建议
1. 改用HTML解析库替代纯文本读取
直接用BufferedReader读取并匹配关键词的方式,极易受页面结构干扰(比如关键词在HTML注释、嵌套标签中)或动态内容(JS渲染的年龄验证)影响,可靠性差。推荐用Jsoup这类专业HTML解析库:
- 直接解析页面DOM,通过选择器定位年龄限制相关元素,比如
doc.select(".age-restriction, .adult-content"),再检查元素内的文本; - 若遇到JS动态渲染的页面,可结合无头浏览器(如HtmlUnit)先执行页面脚本,再解析渲染后的内容。
2. 优化关键词匹配策略
如果暂时不想引入第三方库,可调整现有逻辑:
- 先完整读取页面内容,去除HTML标签后转成统一小写,再进行匹配,避免标签干扰;
- 扩展关键词库,覆盖多场景:
18+、年龄验证、成人内容、age verification、restricted content、parental guidance等; - 用正则表达式替代简单
contains,比如匹配\d+\+(数字加+)、(age|年龄)\s*(verify|验证|restriction|限制)这类组合模式。
3. 利用HTTP响应头与元数据
部分平台会通过响应头或HTML元标签声明内容分级:
- 检查响应头中的自定义分级字段,或
X-Robots-Tag等相关字段; - 解析HTML的
<meta>标签,比如<meta name="rating" content="adult">这类标识成人内容的元数据。
4. 处理重定向场景
很多年龄验证流程会通过3xx重定向跳转至验证页面,需确保跟踪所有重定向,解析最终跳转后的页面内容,不要只检测初始链接的响应。
内容的提问来源于stack exchange,提问作者Andrei Greblă
相关产品推荐
相关产品推荐

