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
相关产品推荐
相关产品推荐

