URLConnection: lecture à partir d'une URL

java.net.URLConnection est une classe qui fait le lien entre l'application et l'url. Pour avoir une réponse HTTP, il faut d'abord créer une connexion avec l'url en deux étapes:
  • openConnection: cette méthode crée l'objet connection qui configure les paramètres de connexion et les paramètres de réception.
  • URLConnection.connect: crée l'interaction avec la ressource en initialisant la communication entre le programme Java et l'url.
Le code suivant crée une connexion vers le site http://www.codeurjava.com.

URL url = null;
try {
url = new URL("http://www.codeurjava.com");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
URLConnection con = url.openConnection();
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e.printStackTrace();
}
L'objet URLConnection est créé a chaque fois que la connexion soit établie avec openConnection(). Maintenant que la connexion est établie avec succès, vous pouvez utiliser URLConnection pour lire et écrire vers l'url avec les flux de données de lecture et d'écriture InputStream et outputStream.

Lire à partir de l'URLConnection

Ce programme récupère l'objet inputStream, la connexion est ouvert avec la méthode getInputStream(), puis il crée un BufferedReader sur cet InputStream et lit le contenu ligne par ligne avec la méthode readline() qu'on doit le charger dans une variable de type String.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class URLConnectionExemple {

public static void main(String[] args) {
String host = "http://www.codeurjava.com/";
URL aURL = null;
String codeHTML = "";
try {
aURL = new URL(host);
//ouvrir la connexion
URLConnection con = aURL.openConnection();
//temps maximun alloué pour se connecter
con.setConnectTimeout(60000);
//temps maximun alloué pour lire
con.setReadTimeout(60000);
//flux de lecture avec l'encodage des caractères UTF-8
BufferedReader in = new BufferedReader(
new InputStreamReader(
con.getInputStream(),"UTF-8"));
String inputline;
while((inputline = in.readLine())!=null){
//concaténation+retour à la ligne avec \n
codeHTML += inputline+"\n";
}
//il faut bien fermer le flux de lecture
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(codeHTML);
}
}
Résultat

<!DOCTYPE html>
<html dir="ltr" lang="fr" xmlns:b="http://www.google.com/2005/gml/b" xmlns:data="http://www.google.com/2005/gml/data" xmlns:expr="http://www.google.com/2005/gml/expr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Tutoriels et exemples de développement JAVA</title>
.
.
.
</head></html></pre>
</div>
</div>
Ce code récupère le code HTML en Java. Si le programme affiche un message d'erreur, alors, le programme n'a pas arrivé a trouvé le serveur ou l'url n'est joignable. Dans notre programme, on a programmé le temps maximum accordé a la connexion et à la lecture à 6 secondes. Après ce temps là, le programme s’arrête.

Références
Oracle: Class URL: openConnection
upenn: Class java.net.URLConnection
StackOverFlow: Using java.net.URLConnection to fire and handle HTTP requests?