[Java] Javaaaa ? Nan ! Javapas.

Fermé
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 22 avril 2004 à 17:57
choubaka Messages postés 39402 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 octobre 2024 - 23 avril 2004 à 14:09
Bonjour tout le monde.

Je suis en train d'écrire une chtite applet en Java, mais Dieu que ce langage est verbeux !

Je cherche à faire un truc très simple:
Je donne une URL, il me renvoie le code HTML de la page dans une string.
Simple, non ?

En Python, c'est facile:
htmlPage = urllib.urlopen("http://www.commentcamarche.net").read()

Et voilà j'ai ma chaîne.

Mais en Java j'ai l'impression qu'on est obligé de passer par 3 tonnes d'objets (URL, URLConnection, InputStream...), par un tableau de byte[], et enfin un objet String.

C'est aussi lourd que ça ou bien je m'y prend mal ?
Il y-a-t'il un moyen simple et efficace de faire ça ?

Merci d'avance.
A voir également:

8 réponses

Nictus Messages postés 5 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 26 avril 2004
22 avril 2004 à 18:10
Salut Sebsauvage!

Je ne suis pas entièrement sûr que ça marche (pas moyen de tester tout de suite) mais essaie la méthode getContent() sur ton objet URL. Ca revient à passer par URLConnection.getContent(), il est donc possible que ça fonctionne.

Mais je suis pas sûr du tout...


Nictus
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 avril 2004 à 18:36
D'après la doc, getContent() renvoie un Object.

Dans mon cas, il semble que ça renvoie un InputStream.
Je suis donc encore obligé de créer un byte[] pour lire le stream (avec .read()), puis convertir le byte[] en String.

Je trouve ça lourd.
ça serait bien le diable qu'il n'y ait pas moyen de faire plus simple, mais je ne vois pas.

mmm.... j'espère trouver mieux.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 avril 2004 à 18:43
J'ai trouvé ça sur le web:
http://groups.google.com/groups?selm=7n5pj3%24kq0%40dfw-ixnews5.ix.netcom.com

J'essai et je vous tiens au courant.

(Il me semblait avoir déjà essayé ça, et que ça me pétait un CastException... marf... je vais ré-essayer).


(PS: Pour info, le but de mon applet c'est de faire l'installation et la mise à jour automatique de la version gratuite de F-Prot, c'est à dire que ça automatise les manipulations décrites là: http://sebsauvage.net/logiciels/integration_fprot.html )
0
Nictus Messages postés 5 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 26 avril 2004
22 avril 2004 à 18:43
Ce qu'il faudrait tester, c'est ce fameux objet renvoyé par getContent().
Mais malgré tout je ne suis pas sûr qu'il y ait une meilleure solution que le stream, etc... car l'objet URL peut désigner n'importe quel type d'url... (en tous cas c'est ce que dit la doc)

Ou alors tu crées une classe dérivée d'URL qui n'accepte que des adresses finissant par .htm ...

Euh non en fait c'est pas génial, autant garder l'autre méthode!!!

Bonne chance!!!


Nictus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 avril 2004 à 23:58
Bon j'ai essayé la solution à l'URL que j'ai donnée:
      URL myURL = new URL("http://www.blablabla.com");
      URLConnection myConnection = myURL.openConnection();
      htmlCode = (String) ( myConnection.getContent() );

Mais à l'exécution j'ai droit à un java.lang.ClassCastException.

myConnection.getContent().toString() me dit:
"sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@6e293a"

ça me semble pas castable en String... pas grave je continue à investiguer.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
23 avril 2004 à 00:11
En lisant, j'ai compris que le .getContent() ne renvoie le contenu que si un handler spécifique au type MIME est installé.
Par défaut, il ne semble y avoir que text/plain.

Ils semblent tous dire qu'il faut passer obligatoirement par un stream.
(URL.openStream()).

Si j'arrive à trouver un moyen élégant de convertir un stream en String, je fais signe.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
23 avril 2004 à 00:33
Bon, voilà un truc qui marche, mais c'est vraiment usine à gaz.
Je n'arrive pas à croire qu'on ne puisse pas faire plus simple:
      URL myURL = new URL("http://ww.blablabla.com");
      BufferedReader contentStream = new BufferedReader(new InputStreamReader(myURL.openStream()));
      String line;
      StringBuffer buffer = new StringBuffer();
      while ((line = contentStream.readLine()) != null)
        buffer.append(line+"\n");
      htmlCode = buffer.toString();


(J'ai utilisé un StringBuffer histoire que la concaténation des chaîne ne soit pas trop pénalisante pour les perfs.)

C'est pas bô. :-(
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
23 avril 2004 à 14:06
Bon... mon applet est terminée et elle marche, mais ça me rappelle bien pourquoi je préfère Python.

Je mettrai mon applet en ligne dans les jours qui viennent.
(Elle fait 11 ko.)

Merci.
0
choubaka Messages postés 39402 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 octobre 2024 2 101
23 avril 2004 à 14:09
bienvenu dans le monde de java

Chouba,
Tatatatala...  Chi Hua Hua!
0