gpt4 book ai didi

java - 在Java中将网页内容读入字符串的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 11:09:57 24 4
gpt4 key购买 nike

我有以下 Java 代码来获取给定 URL 处的 HTML 页面的全部内容。这可以以更有效的方式完成吗?欢迎任何改进。

public static String getHTML(final String url) throws IOException {
if (url == null || url.length() == 0) {
throw new IllegalArgumentException("url cannot be null or empty");
}

final HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
final BufferedReader buf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final StringBuilder page = new StringBuilder();
final String lineEnd = System.getProperty("line.separator");
String line;
try {
while (true) {
line = buf.readLine();
if (line == null) {
break;
}
page.append(line).append(lineEnd);
}
} finally {
buf.close();
}

return page.toString();
}

我忍不住觉得行读数不太理想。我知道我可能屏蔽了由 openConnection 调用引起的 MalformedURLException,我对此表示同意。

我的函数还有一个副作用,即使 HTML 字符串具有当前系统的正确行终止符。这不是一个要求。

我意识到网络 IO 可能会使读取 HTML 所需的时间相形见绌,但我仍然想知道这是最佳的。

旁注:如果 StringBuilder 有一个用于打开的 InputStream 的构造函数,它可以简单地获取 InputStream 的所有内容,那就太棒了code> 并将其读入 StringBuilder

最佳答案

正如在其他答案中看到的,在任何强大的解决方案中都应该考虑到许多不同的边缘情况(HTTP 特性、编码、分块等)。因此,我建议在玩具程序以外的任何程序中使用事实上的 Java 标准 HTTP 库: Apache HTTP Components HTTP Client .

他们提供了很多 sample ,"just" getting the response contents for a request looks like this :

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://www.google.com/");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
// responseBody now contains the contents of the page
System.out.println(responseBody);
httpclient.getConnectionManager().shutdown();

关于java - 在Java中将网页内容读入字符串的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com