Lire l'url vers la chaîne de caractères en quelques lignes de code java
j'essaie de trouver L'équivalent de Java à Groovy:
String content = "http://www.google.com".toURL().getText();
je veux lire le contenu d'une URL en chaîne. Je ne veux pas polluer mon code avec des flux et des boucles tamponnées pour une tâche aussi simple. J'ai regardé dans HttpClient d'apache mais je ne vois pas non plus d'implémentation sur une ou deux lignes.
9 réponses
maintenant Qu'un certain temps s'est écoulé depuis que la réponse originale a été acceptée, il y a une meilleure approche:
String out = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\A").next();
si vous voulez une implémentation un peu plus complète, qui n'est pas une seule ligne, faites ceci:
public static String readStringFromURL(String requestURL) throws IOException
{
try (Scanner scanner = new Scanner(new URL(requestURL).openStream(),
StandardCharsets.UTF_8.toString()))
{
scanner.useDelimiter("\A");
return scanner.hasNext() ? scanner.next() : "";
}
}
cette réponse se réfère à une ancienne version de Java. Vous voudrez peut-être regarder la réponse de ccleve.
Voici la façon traditionnelle de le faire:
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);
}
}
comme @extraneon l'a suggéré, ioutils vous permet de le faire d'une manière très éloquente qui est encore dans L'esprit de Java:
InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
System.out.println( IOUtils.toString( in ) );
} finally {
IOUtils.closeQuietly(in);
}
ou utilisez IOUtils.toString(URL url)
, ou la variante qui accepte également un paramètre d'encodage.
maintenant que plus de temps a passé, voici une façon de le faire en 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"));
}
exemple supplémentaire utilisant la goyave:
URL xmlData = ...
String data = Resources.toString(xmlData, Charsets.UTF_8);
il y a une façon encore meilleure que Java 9:
URL u = new URL("http://www.example.com/");
try (InputStream in = u.openStream()) {
return new String(in.readAllBytes(), StandardCharsets.UTF_8);
}
comme dans l'exemple groovy original, cela suppose que le contenu est encodé UTF-8. (Si vous avez besoin de quelque chose de plus intelligent que cela, vous devez créer une connexion URL et l'utiliser pour comprendre l'encodage.)
si vous avez le flux d'Entrée (Voir la réponse de Joe), considérez également ioutils.toString (inputstream ).
fonctionne avec Java 7/8, sécurisé url, et montre comment ajouter un cookie à votre demande. Remarque c'est surtout une copie directe de cette autre grande réponse sur cette page , mais a ajouté le témoin exemple, et des précisions qu'il fonctionne avec secure url ;-)
si vous devez vous connecter à un serveur avec un certificat non valide ou un certificat auto-signé, cela lancera des erreurs de sécurité à moins que vous importiez le certificat. Si vous avez besoin de cette fonctionnalité, vous pouvez considérer l'approche détaillée dans cette réponse à cette question relative à StackOverflow.
exemple
String result = getUrlAsString("https://www.google.com");
System.out.println(result);
sorties
<!doctype html><html itemscope="" .... etc
Code
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);
}
}
Voici la réponse charmante de Jeanne, mais enveloppée dans une fonction ordonnée pour les muppets comme moi:
private static String getUrl(String aUrl) throws MalformedURLException, IOException
{
String urlData = "";
URL urlObj = new URL(aUrl);
URLConnection conn = urlObj.openConnection();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)))
{
urlData = reader.lines().collect(Collectors.joining("\n"));
}
return urlData;
}