You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测网站访问年龄限制?技术实现方案问询

问题

问题背景

目前我的应用已具备检测页面/资料是否存在、链接能否访问的功能。现需打造更安全的程序,新增目标平台年龄限制检测功能,避免引导用户访问含不当内容的平台。

当前问题

我尝试使用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ă

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:44:58