Comment faire un HTTP GET en Java?
Réponses
Trop de publicités?Si vous souhaitez diffuser n'importe quelle page web, vous pouvez utiliser la méthode ci-dessous.
import java.io.*;
import java.net.*;
public class c {
public static String getHTML(String urlToRead) throws Exception {
StringBuilder result = new StringBuilder();
URL url = new URL(urlToRead);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()))) {
for (String line; (line = reader.readLine()) != null; ) {
result.append(line);
}
}
return result.toString();
}
public static void main(String[] args) throws Exception
{
System.out.println(getHTML(args[0]));
}
}
Techniquement, vous pourriez le faire avec un socket TCP direct. Cependant, je ne le recommanderais pas. Je vous recommanderais vivement d'utiliser Apache HttpClient à la place. Dans sa forme la plus simple:
GetMethod get = new GetMethod("http://httpcomponents.apache.org");
// exécuter la méthode et gérer les réponses d'erreur.
...
InputStream in = get.getResponseBodyAsStream();
// Traiter les données du flux d'entrée.
get.releaseConnection();
et voici un exemple plus complet.
Si vous ne souhaitez pas utiliser de bibliothèques externes, vous pouvez utiliser les classes URL et URLConnection de l'API standard de Java.
Un exemple ressemble à ceci:
String urlString = "http://oùquecesoit.com/someAction?param1=valeur1¶m2=valeur2....";
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
// Faites ce que vous voulez avec ce flux
La manière la plus simple qui ne nécessite pas de bibliothèques tierces est de créer un objet URL puis d'appeler soit [openConnection](http://java.sun.com/javase/6/docs/api/java/net/URL.html#openConnection()) ou [openStream](http://java.sun.com/javase/6/docs/api/java/net/URL.html#openStream()) dessus. Notez que cela est une API assez basique, donc vous n'aurez pas beaucoup de contrôle sur les en-têtes.