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

Java无第三方库获取网页文本返回空字符串问题求助

问题描述

我是Java新手,尝试不依赖任何第三方库,通过Java代码获取网页文本,但当前代码返回空字符串。先后尝试了Scanner和BufferedReader两种方式,结果均一致,也试过其他代码但都无效,希望能解决该问题或提供其他原生实现方法。附上的代码使用HttpURLConnection请求GitHub上的version.txt文件:

public String checkUpdate(){

        String responseText;

        int responseCode;

        try{

            String urlString = "https://raw.githubusercontent.com/farhanaliofficial/Lite/main/version.txt";

            URL url = new URL(urlString);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("GET");

            connection.setRequestProperty("accept","*/*");

            responseCode = connection.getResponseCode();
            
            Scanner scanner = new Scanner(connection.getInputStream());
            
//          BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder responseBuilder = new StringBuilder();
//          String line;
//
//          while ((line = reader.readLine()) != null) {
//              responseBuilder.append(line);
//          }
//          reader.close();
//          responseText = responseBuilder.toString();
            if(responseCode == 200){
            while (scanner.hasNextLine()) {
                responseBuilder.append(scanner.nextLine());
            }
            responseText = responseBuilder.toString();
            }else{
                responseText = responseCode+"";
            }
        }
        catch(Exception e){
            e.printStackTrace();
            responseText = e.toString();
        }
        return responseText;
    }
解决方法

你的代码返回空字符串,核心原因是GitHub的raw服务器会拦截无User-Agent标识的请求,这类请求会被判定为非合法请求,返回空内容。另外代码未正确关闭资源,可能引发流读取异常。

以下是修正后的Scanner实现版本:

public String checkUpdate() {
    String responseText = "";
    int responseCode;

    try {
        String urlString = "https://raw.githubusercontent.com/farhanaliofficial/Lite/main/version.txt";
        URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        
        // 添加User-Agent模拟浏览器请求,避免被服务器拦截
        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");
        connection.setRequestMethod("GET");
        connection.setRequestProperty("accept", "*/*");
        
        responseCode = connection.getResponseCode();

        if (responseCode == 200) {
            // 用try-with-resources自动关闭流,避免资源泄漏
            try (Scanner scanner = new Scanner(connection.getInputStream(), "UTF-8")) {
                StringBuilder responseBuilder = new StringBuilder();
                while (scanner.hasNextLine()) {
                    responseBuilder.append(scanner.nextLine());
                    // 如需保留原文本换行符,可取消下面注释
                    // responseBuilder.append(System.lineSeparator());
                }
                responseText = responseBuilder.toString();
            }
        } else {
            responseText = String.valueOf(responseCode);
        }
        // 显式关闭连接释放资源
        connection.disconnect();
    } catch (Exception e) {
        e.printStackTrace();
        responseText = e.toString();
    }
    return responseText;
}

如果偏好BufferedReader实现,同样可以用以下代码:

public String checkUpdateWithBufferedReader() {
    String responseText = "";
    int responseCode;

    try {
        String urlString = "https://raw.githubusercontent.com/farhanaliofficial/Lite/main/version.txt";
        URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        
        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");
        connection.setRequestMethod("GET");
        connection.setRequestProperty("accept", "*/*");
        
        responseCode = connection.getResponseCode();

        if (responseCode == 200) {
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
                StringBuilder responseBuilder = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    responseBuilder.append(line);
                    // 保留换行符可选
                    // responseBuilder.append(System.lineSeparator());
                }
                responseText = responseBuilder.toString();
            }
        } else {
            responseText = String.valueOf(responseCode);
        }
        connection.disconnect();
    } catch (Exception e) {
        e.printStackTrace();
        responseText = e.toString();
    }
    return responseText;
}

关键修改说明

  • 添加User-Agent请求头:让服务器识别为合法浏览器请求,避免被拦截。
  • 使用try-with-resources:自动关闭输入流,防止资源泄漏和读取异常。
  • 指定UTF-8编码:确保文本读取不会出现乱码。
  • 显式关闭连接:及时释放HttpURLConnection资源。

内容的提问来源于stack exchange,提问作者Farhan Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:40:25