Remplir un formulaire Post avec Java et HttpClient

Dans certains programmes, il est parfois utile de récupérer les données d’un site web. Cependant, dans certains cas, on cherche à récupérer des infos “personnalisées”. Par exemple, le résultat d’une recherche.

Pour de nombreux moteurs de recherche, il est possible d’effectuer une recherche par la méthode Get (en passant le terme recherché dans l’URL). Mais, parfois, ce n’est pas possible : le formulaire ne peut être validé que par la méthode Post (notamment pour les identifications et autres).

Une API du projet Jakarta Commons a été développée en ce sens, elle s’appelle HttpClient. Nous allons voir ici comment l’utiliser afin de remplir un formulaire et récupérer la réponse du site web.

Dans cet exemple, nous utiliserons un petit formulaire de démo : http://www.pexiweb.be/demo/form/index.html. N’hésitez pas non plus à regarder dans l’API de HttpClient.

Tout d’abord, il va falloir récupérer la librairie HttpClient (la version utilisée ici est la 3.1) ainsi que ses dépendances : Commons Codecs et le Logging Component. Ajoutez les jar téléchargés au BuildPath de votre projet. Commençons par importer les classes utilisées : HttpClient et PostMethod pour les requêtes envoyées au site et BufferedReader et InputStreamReader pour récupérer la réponse du site web.

[codesyntax lang=”java”]

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import java.io.BufferedReader;
import java.io.InputStreamReader;

[/codesyntax]

Ensuite, il faut créer un objet HttpClient. On pourrait dire que cet objet est un petit peu comme votre navigateur. Et, évidemment, il faut dire à votre navigateur ce qu’il va devoir faire. On va donc créer un objet PostMethod. Cet objet, hérité de la classe HttpMethod, va indiquer au client (HttpClient) ce qu’il faut faire. Dans son constructeur, on va indiquer non pas l’url du formulaire mais l’url du traitement du formulaire ! Donc, c’est l’url indiquée après le ‘action=…’. Vous trouverez cela facilement dans le code source de la page. Ensuite, il faut encore indiquer à notre méthode quels sont les champs du formulaire et avec quoi il faut les remplir.

[codesyntax lang=”java”]

HttpClient client = new HttpClient();
PostMethod methode = new PostMethod(“http://www.pexiweb.be/demo/form/traitement.php”);
methode.addParameter(“champ”, “Hello World !”);

[/codesyntax]

Maintenant que tout est prêt, on va appuyer sur le bouton submit de notre formulaire : on appelle executeMethod de HttpClient avec comme paramètre notre PostMethod. Attention, cette méthode peut lancer une exception et renvoie un nombre en fonction de l’état de la requête ! Ne pas oublier également de créer un buffer qui récupérera la réponse du site. Ce buffer va récupérer stream provenant de notre PostMethod. On l’affiche ensuite avec une bête boucle qui parcoure toutes les lignes.

[codesyntax lang=”java”]

BufferedReader br = null;
try
{
int retour = client.executeMethod(methode) ;
br = new BufferedReader(new InputStreamReader(methode.getResponseBodyAsStream()));
String readLine;
while(((readLine = br.readLine()) != null))
{
System.out.println(readLine);
}
}
catch (Exception e)
{
System.err.println(e);
}

[/codesyntax]

Pour finir, on ferme la connexion avec le site internet (on ferme le PostMethod) et si le buffer a été ouvert, on le ferme également.

[codesyntax lang=”java”]

finally
{
methode.releaseConnection();
if(br != null)
{
try
{
br.close();
}
catch (Exception e) {   }
}
}

[/codesyntax]

Normalement, vous devriez voir apparaitre votre requête si vous testez le programme sur le formulaire de démo. Mais attention, ne pensez pas que vous pouvez dès à présent remplir tous les formulaires du web, faire des programmes bruteforce ou de spam : de nombreux sites requièrent l’utilisation de cookies, de sessions ou d’autres utilisent le protocole https. HttpClient peut gérer tout cela, je vous invite à aller regarder dans l’API. A noter que je vous proposais récemment comment récupérer le code source d’une page, c’est également possible avec cette librairie.

Pour les paresseux, voici le code complet de la classe :

[codesyntax lang=”java”]

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.methods.PostMethod;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class Envoi {

public static void main(String args[]) {

// On cree le client

HttpClient client = new HttpClient();

// Le HTTPMethod qui sera un Post en lui indiquant l’URL du traitement du formulaire

PostMethod methode = new PostMethod(“http://www.pexiweb.be/demo/form/traitement.php”);

// On ajoute les parametres du formulaire

methode.addParameter(“champ”, “Hello World !”); // (champs, valeur)

// Le buffer qui nous servira a recuperer le code de la page

BufferedReader br = null;

try

{

// http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpStatus.html

int retour = client.executeMethod(methode);

// Pour la gestion des erreurs ou un debuggage, on recupere le nombre renvoye.

System.out.println(“La reponse de executeMethod est : ” + retour);

br = new BufferedReader(new InputStreamReader(methode.getResponseBodyAsStream()));

String readLine;

// Tant que la ligne en cours n’est pas vide

while(((readLine = br.readLine()) != null))

{

System.out.println(readLine);

}

}

catch (Exception e)

{

System.err.println(e); // erreur possible de executeMethod

}

finally

{

// On ferme la connexion

methode.releaseConnection();

if(br != null)

{

try

{

br.close(); // on ferme le buffer

}

catch (Exception e) { /* on fait rien */ }

}

}

}

}

[/codesyntax]

Pyo

Recherches associées:

  • formulaire avec photo en java

Comments

  1. By Morsi

    Répondre

  2. By Pyo

    Répondre

  3. By Morsi

    Répondre

  4. By Pyo

    Répondre

  5. By fabrice91

    Répondre

  6. By fabrice91

    Répondre

  7. By java

    Répondre

  8. Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

Protected with SiteGuarding.com Antivirus
Lire les articles précédents :
Récupérer le code source d’une page avec Java

J'ai présenté il y a peu un petit programme que j'ai créé (Skyblog Photos Downloader) et pour lequel je dois...

Fermer