阅读urlstring的几行java代码

我试图findJava相当于Groovy的:

String content = "http://www.google.com".toURL().getText(); 

我想从url读取内容到string。 我不想污染我的代码与缓冲stream和循环这样一个简单的任务。 我看着Apache的HttpClient,但我也没有看到一个或两个行的实现。

现在接受原始答案已经有一段时间了,还有一个更好的方法:

 String out = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\\A").next(); 

这个答案是指Java的旧版本。 你可能想看看下面的ccleve的答案。


这是传统的做法:

 import java.net.*; import java.io.*; public class URLConnectionReader { public static String getText(String url) throws Exception { URL website = new URL(url); URLConnection connection = website.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream())); StringBuilder response = new StringBuilder(); String inputLine; while ((inputLine = in.readLine()) != null) response.append(inputLine); in.close(); return response.toString(); } public static void main(String[] args) throws Exception { String content = URLConnectionReader.getText(args[0]); System.out.println(content); } } 

正如@extraneon所build议的那样, ioutils允许你以一种雄辩的方式来做到这一点,这仍然是Java的精神:

  InputStream in = new URL( "http://jakarta.apache.org" ).openStream(); try { System.out.println( IOUtils.toString( in ) ); } finally { IOUtils.closeQuietly(in); } 

或者只使用IOUtils.toString(URL url) ,或者接受编码参数的变体。

现在已经有更多的时间了,下面是在Java 8中做的一个方法:

 URLConnection conn = url.openConnection(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { pageText = reader.lines().collect(Collectors.joining("\n")); } 

使用番石榴的其他例子:

 URL xmlData = ... String data = Resources.toString(xmlData, Charsets.UTF_8); 

如果你有inputstream(参见Joe的回答),也考虑ioutils.toString(inputstream)。

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString(java.io.InputStream

以下内容适用于Java 7/8,安全的URL,并展示了如何将Cookie添加到您的请求中。 请注意,这主要是这个页面上的其他伟大的答案的直接副本,但添加了C​​ookie的例子,澄清,它也适用于安全的url;-)

如果您需要连接到具有无效证书或自签名证书的服务器,则会导致安全错误,除非您导入证书。 如果你需要这个function,你可以考虑 在StackOverflow这个相关问题的 答案中详细说明的方法 。

 String result = getUrlAsString("https://www.google.com"); System.out.println(result); 

输出

 <!doctype html><html itemscope="" .... etc 

 import java.net.URL; import java.net.URLConnection; import java.io.BufferedReader; import java.io.InputStreamReader; public static String getUrlAsString(String url) { try { URL urlObj = new URL(url); URLConnection con = urlObj.openConnection(); con.setDoOutput(true); // we want the response con.setRequestProperty("Cookie", "myCookie=test123"); con.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); StringBuilder response = new StringBuilder(); String inputLine; String newLine = System.getProperty("line.separator"); while ((inputLine = in.readLine()) != null) { response.append(inputLine + newLine); } in.close(); return response.toString(); } catch (Exception e) { throw new RuntimeException(e); } }