IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Récupérer en String le code HTML d'une page web en injectant des paramètres POST


Sujet :

Services Web Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut Récupérer en String le code HTML d'une page web en injectant des paramètres POST
    Bonjour à tous,

    Pour pouvoir utiliser une bibliothèque servant à générer des PDF, j'ai besoin de récupérer le contenu HTML de la page à exporter.
    J'ai bien trouvé une méthode sur Internet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public String getHTML(String urlToRead) {
          URL url; // The URL to read
          HttpURLConnection conn; // The actual connection to the web page
          BufferedReader rd; // Used to read results from the web page
          String line; // An individual line of the web page HTML
          String result = ""; // A long string containing all the HTML
          try {
             url = new URL(urlToRead);
             conn = (HttpURLConnection) url.openConnection();
             conn.setRequestMethod("POST");
             rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
             while ((line = rd.readLine()) != null) {
                result += line;
             }
             rd.close();
          } catch (Exception e) {
             e.printStackTrace();
          }
          return result;
       }
    Cela fonctionne bien avec une page simple, mais avec des paramètres en POST, c'est une autre affaire...

    J'ai bien essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    conn.setRequestMethod("POST");
    conn.setRequestProperty("myParamKey", "myParamValue");
    ...
    ... mais visiblement, un paramètre et une propriété, ce n'est pas la même chose. Et, je n'ai pas trouvé de méthode setRequestParameter() ou quelque chose comme ça.

    Donc, si quelqu'un a une solution (même sans utiliser cette méthode), il est le bienvenu.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Points : 74
    Points
    74
    Par défaut
    Je vois trois options:


    -> la librairie commons-httpclient, de jakarta, qui est bien plus évolué que URL
    -> Cette FAQ expliquant comment faire un POST avec URLConnection
    -> Si la page HTML est local (même webapplication), préférer créer un HttpServletRequest à vous (les api java fournissent déjà des wrapper bien utiles comme base) contenant les valeur de POST, et diriger l'output (wrapper sur le HttpServletResponse) vers un ByteArrayOutputStream. Puis enfin un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpServletRequest maRequestTraffiquee = .....;
    HttpServletResponse maResponseTraffiquee = .... ;
    servletRequest.getRequestDispatcher("/chemin/vers/servlet").include(maRequestTraffiquee,maReponseTraffiquee);
    // récupérer les byte[] depuis le byteArrayoutputStream
    L'avantage de la dernière méthode, plus compliquée ce sont
    -> ses performances (moins de travail pour le serveur)
    -> préservation des droits de l'utilisateur courant (pas de nouvelle requete)
    -> préservation éventuelle du request-scope actuel et de la session.
    Mais ne marche que pour avoir une page au sein de la même application

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    la librairie commons-httpclient, de jakarta, qui est bien plus évolué que URL
    +1.

    Si la page HTML est local (même webapplication), préférer créer un HttpServletRequest à vous (les api java fournissent déjà des wrapper bien utiles comme base) contenant les valeur de POST, et diriger l'output (wrapper sur le HttpServletResponse) vers un ByteArrayOutputStream
    Intéressant mais il y a qqch qui m'échappe.
    Comment vas tu préciser à l'instance HttpServletRequestWrapper d'utiliser la méthode POST? Par défaut, la méthode HTTP utilisée est celle de l'objet HttpServletRequest wrappé. Et comment vas tu préciser les paramètres du POST ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Points : 74
    Points
    74
    Par défaut
    c'est un wrapper, tu peux donc sucharger les méthodes qui t'intéressent. En l'occurrence:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MonRequestWrapper extends HttpServletWrapper {
    //.....
    @override
    public String getMethod(){ return "POST"; }
    }
    Pour les paramètres, surcharger les méthodes getParameterXXXX.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Ah d'accord. J'avais pas compris que tu parlais de créer une nouvelle classe.
    Sympa !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Merci CastorJoyeux, c'est nickel ! Je ne pouvais pas demander mieux.

    Pour l'instant, j'utilise la méthode de la FAQ (plus simple à mettre en œuvre et plus proche de ce que je faisais déjà).
    Par contre, c'est sympa mais ça a une petite tendance à convertir en é et compagnie les caractères de mes paramètres. Et vu que derrière il y a un parseur XML qui vient mettre son nez, ça ne passe pas bien...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Voilà, résolu.

    Le dernier problème cité (la transformation en é...) n'avait pas de rapport avec la méthode, le problème venait d'ailleurs dans mon code.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récuperer le code HTML d'une page Web
    Par Maxence HUBICHE dans le forum Contribuez
    Réponses: 3
    Dernier message: 03/01/2011, 17h57
  2. Récupérer le code HTML d'une page web à l'aide d'un Socket
    Par Ryu2000 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 14/12/2010, 17h25
  3. Récupérer le code HTML d'une page web
    Par sorcer1 dans le forum Windows Mobile
    Réponses: 0
    Dernier message: 24/09/2009, 17h54
  4. recupérer le code Html d'une page Web
    Par comtention dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 05/09/2007, 21h03
  5. Récupération du code HTML d'une page Web
    Par jgavard dans le forum Eclipse Java
    Réponses: 19
    Dernier message: 06/11/2006, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo