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

Entrée/Sortie Java Discussion :

Récupération de page Web


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut Récupération de page Web
    Bonjour!

    Après avoir exploré à fond pas mal de langage comme le PHP, je me met à présent au Java.

    Comme j'ai fait que du développement web jusque là, mes premiers codes javas seront dans ce sens.

    Donc je me suis donné pour but de récupérer une page internet avec un maximum d'informations possibles, mais je me suis vite heurté à un problème.

    Lorsque je récupère le contenu (HTML) d'une page, je n'ai pas la totalité de la page! (le code html est coupé...)

    Second problème: Certains sites ne marchent pas comme:
    -google.fr
    -developpez.com ( )

    Pourquoi?

    Voici mon code:

    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
    21
    22
    23
    24
     
      try
       {
       URL url = new URL("http", addr, "");
       URLConnection connexion = url.openConnection();
       weight = connexion.getContentLength();
       InputStream Content = connexion.getInputStream();
     
       byte contenuFichier[] = new byte[connexion.getContentLength()];
       int octetsLus = Content.read(contenuFichier);
     
       content = new String(contenuFichier, 0, 0, octetsLus);
     
       Content.close();
       System.out.println("------------------------------------------");
       System.out.println("Résultat:");
       System.out.println("URL: http://"+addr);
       System.out.println("Poids: "+weight);
       System.out.println("Contenu: "+content);
       }
      catch(Exception e)
       { 
       System.out.println("Echec lors de la connexion: "+e);
       }
    Merci bien!

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Il y a deux problèmes : tu gères mal la récupération du flux, et aussi il faut se désigner comme navigateur amical.

    Voici un code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    package zou;
     
    import java.io.*;
    import java.net.*;
     
    public class RecuPageWeb
    {
      public static void main(String[] args) throws Exception
      {
        String addr;
        int offs;
        int lustotal;
     
        System.setProperty("http.agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");    
        addr = "http://www.free.fr";
        URL url = new URL(addr);
        URLConnection connexion = url.openConnection();
        int weight = connexion.getContentLength();
        InputStream content = connexion.getInputStream();
     
        byte contenuFichier[] = new byte[weight];
        offs = 0;
        lustotal = 0;
        while (lustotal < weight)
        {
          int octetsLus = content.read(contenuFichier, offs, weight - offs);
          offs = offs + octetsLus;
          lustotal = lustotal + octetsLus;
        }
     
        String scontent = new String(contenuFichier);
     
        content.close();
        System.out.println("------------------------------------------");
        System.out.println("Résultat:");
        System.out.println("URL: "+addr);
        System.out.println("Poids: "+weight);
        System.out.println("Contenu: "+scontent);
      }
    }
    Tu vois que j'ai inclu la lecture du flux dans une boucle.

    Malheureusement, le coup du http.agent, qui marche d'habitude, ne marche pas ce soir ! j'ai du faire une boulette qqpart ou je ne sais quoi.

    Tu peux aller voir aussi [Résolu] [Reseau] Récupérer le code source d'une URL.

    Et, quand tu seras plus aguerit, le paquage java.nio.

    A+.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut
    Merci pour ces pistes!

    Je regarderais ca plus en détail demain

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut
    Voilà, je viens de faire quelque test, et c'est déjà un peu mieux!

    Donc voici le code (j'ai retiré tout les out.println...)

    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
    21
    22
    23
    24
      int offs = 0, lus = 0;	
      System.setProperty("http.agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");    	    
      Scanner input = new Scanner(System.in); //Récupération de l'adresse hote à analyser
      hote = input.next();
      out.println("Connexion à "+hote+"...");
     
      URL url = new URL("http", hote, "");
      URLConnection connexion = url.openConnection(); //Ouverture de la connexion
      weight = connexion.getContentLength(); //Récupération du poids en octet du contenu
      type = connexion.getContentType(); //Récupération du type de données
     
      // Récupération du contenu
      InputStream Content = connexion.getInputStream();
      byte fileContent[] = new byte[weight];
      while (lus < weight)
       {
       int octetsLus = Content.read(fileContent, offs, weight - offs);
       offs += octetsLus;
       lus += octetsLus;
       }
     
      String content = new String(fileContent);
     
      Content.close(); //Fermeture de la connexion
    Cette fois ci, tous le contenu de la page est récupéré, mais sur certains sites, ca ne marche pas comme prévue.

    L'erreur renvoyée est la suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.NegativeArraySizeException
    	at Kbot.main.main(main.java:31)
    Y a t-il tout de même un rapport avec la ligne system?

    J'ai également fait un test sur mon Apache local, et j'obtiens la meme erreur. Pourtant, je n'ai rien fais de spécial coté sécurité...

    Merci encore

    Edit:

    Le code trouvé ici fait exactement ce que je recherche:
    http://developpez.net/forums/showthread.php?t=219991

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

Discussions similaires

  1. Récupération infos pages web
    Par zworg dans le forum Web & réseau
    Réponses: 1
    Dernier message: 06/03/2009, 08h45
  2. Récupération de page web
    Par mitchness dans le forum Web
    Réponses: 5
    Dernier message: 13/06/2008, 14h15
  3. Réponses: 1
    Dernier message: 07/08/2006, 06h08
  4. Réponses: 3
    Dernier message: 27/04/2006, 14h23
  5. [Réseau]Récupération de page Web
    Par n1c0las dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 27/03/2004, 18h15

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