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 :

[HTTP][Socket] avec une url c'est possible ?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut [HTTP][Socket] avec une url c'est possible ?
    Bonjour tout le monde,

    afin de tester si un serveur HTTP n'est pas en panne ou arrêté, je désire effectuer un GET sur une url de ce serveur je fais donc la fonction :

    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
    42
    43
    44
    45
     
    	public boolean test() {
     
    		try {
    			InetAddress ia = InetAddress.getByName(inter.address);
     
    			/** creation of a socket with the url and the http port by default*/
    			Socket s = new Socket(urlGetHttp,80,ia,0); 
     
    			s.setSoTimeout(10000);
     
    			/** allows to create an entry flow on the socket to the customer */ 
    			InputStream in = s.getInputStream(); 
     
    			/** allows to create an exit flow on the socket to the server */
    			OutputStream out = s.getOutputStream(); 
     
    			/** allows to read the messages on the socket from the server */
    			BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     
    			/** allows to write on the exit flow */
    			PrintWriter writer = new PrintWriter(out); 
     
    			/** send the command to have informations from the server*/
    			String command = "OPTIONS / HTTP/1.0\n\n"; 
    			writer.print(command); 
    			writer.flush(); 
     
    			/** reads the response */
    			String[] input = reader.readLine().split(" ");
     
    			/** if the response contains an HTTP error code */
    			if (Integer.parseInt(input[1])>=500) {				
    				return false;
    			}
     
    			/** socket closed */
    			s.close();
    			return true;
     
    		}catch (IOException e) {
    			e.printStackTrace();			
    			return false;
    		}
    	}
    quand je passe comme url "intranet" il n'y pas de pb par contre si je lui passe par exemple "www.développez.com" ça ne marche pas et une exception est levée à la création de la Socket.

    Qu'en pensez-vous svp?

    Merci d'avance pour vos futures réponses !!!

  2. #2
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Essaye avec la classe URL et HttpURLConnection. Elles sont adaptées au protocole HTTP.

    Nas'

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    merci, je pensais faire comme ça au début le problème c'est qu'il faut que je lui passe une NetworkInterface. De plus, je voudrais garder cet esprit afin de rester en harmonie par rapport aux tests avec d'autres protocoles.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    apparemment y'aurait peut-être un problème avec le proxy.

  5. #5
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Pourquoi est-ce que tu veux absolument passer par une NetworkInterface ?

    Et c'est quoi l'erreur ?

    Sinon je confirme que ça ressemble à un problème de proxy.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    j'ai besoin de mon interface réseau car justement on fait des tests sur des serveurs. On veut donc avoir plusieurs régles get différentes en utilisant plusieurs interrfaces réseaux. comme ça si une règle ne répond plus (i.e. le get ne répond plus) et que les autres répondent, on saura que celà vient du réseau et pas du serveur HTTP. De même si aucune règle ne répond, on saura que c'est le serveur qui est planté.

    en ce qui concerne mon pb c'est bizarre. J'ai fait trois essais différents, voici une récap' :
    • premier essai :
      j'essaye en faisant : GET http://intranet HTTP/1.0
      cela fonctionne réponse du serveur : HTTP /1.1 200 OK


    • second essai :
      j'essaye en faisant : GET http://www.monsite.com HTTP/1.0
      ce site est accessible sans proxy avec les scripts désactivés
      j'ai une réponse du serveur : HTTP /1.1 500 Internal Server Error
      j'ai une réponse comme si le serveur était planté alors qu'il ne l'est pas


    • troisième essai :
      j'essaye en faisant : GET http://www.developpez.com HTTP/1.0
      là il va dans l'exception de mon code ce qui me semble logique


    voilà une tentative d'explication de mon problème.

    Merci d'avance.

  7. #7
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Je pense que tu as peut-être une réaction des sites en face. Ils analysent peut-être qui les contacte et quand ils voient un user agent qui n'est pas celui d'un explorateur, ils renvoient une erreur. Je sais que j'avais eu le problème avec google.

    Maintenant si il s'agit d'un site à toi qui fait une erreur 500, c'est bizarre.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    j'ai modif 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public boolean test() {
     
    		try {
    			InetAddress ia = InetAddress.getByName(inter.address);
     
    			/** creation of a socket with the url and the http port by default*/
    			Socket s = new Socket(urlGetHttp,80,ia,0); 
     
    			s.setSoTimeout(30000);
     
    			/** allows to create an entry flow on the socket to the customer */ 
    			InputStream in = s.getInputStream(); 
     
    			/** allows to create an exit flow on the socket to the server */
    			OutputStream out = s.getOutputStream(); 
     
    			/** allows to read the messages on the socket from the server */
    			BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     
    			/** allows to write on the exit flow */
    			PrintWriter writer = new PrintWriter(out); 
     
    			/** sending of the command to have informations from the server*/
    			String command = "GET http://"+urlGetHttp+"/ HTTP/1.0\n\n"; 
    			writer.print(command); 
    			writer.flush(); 
     
    			/** reading of the response */
    			String[] input = reader.readLine().split(" ");
    			System.out.println(urlGetHttp);
    			for &#40;int i=0;i<input.length;i++&#41; &#123;
    				System.out.print&#40;input&#91;i&#93;+" "&#41;;
    			&#125;
    			System.out.println&#40;&#41;;
     
    			/** if the response contains an HTTP error code */
    			if &#40;Integer.parseInt&#40;input&#91;1&#93;&#41;>=500&#41; &#123;				
    				return false;
    			&#125;
     
    			/** socket closed */
    			s.close&#40;&#41;;
    			return true;
     
    		&#125;catch &#40;IOException e&#41; &#123;
    			e.printStackTrace&#40;&#41;;			
    			return false;
    		&#125;
    	&#125;
    pour le premier c'est toujours OK pour le second c'est nickel j'ai un code 302 par contre j'ai fait un test avec un autre serveur HTTP de chez moi et j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    java.net.SocketTimeoutException&#58; Read timed out
    	at java.net.SocketInputStream.socketRead0&#40;Native Method&#41;
    	at java.net.SocketInputStream.read&#40;Unknown Source&#41;
    	at sun.nio.cs.StreamDecoder$CharsetSD.readBytes&#40;Unknown Source&#41;
    	at sun.nio.cs.StreamDecoder$CharsetSD.implRead&#40;Unknown Source&#41;
    	at sun.nio.cs.StreamDecoder.read&#40;Unknown Source&#41;
    	at java.io.InputStreamReader.read&#40;Unknown Source&#41;
    	at java.io.BufferedReader.fill&#40;Unknown Source&#41;
    	at java.io.BufferedReader.readLine&#40;Unknown Source&#41;
    	at java.io.BufferedReader.readLine&#40;Unknown Source&#41;
    	at packRegle.GetHttp.test&#40;GetHttp.java&#58;115&#41;
    ceci se passe au moment de la lecture (readline), en gros, test attend une réponse du serveur qui n'arrive jamais. Ma question est donc la suivante pourquoi un serveur peut ne pas répondre ? (il n'a aucun pb ce serveur)

  9. #9
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    C'est TON serveur ? Parce que j'ai eu ce problème aussi. Je crois que c'est google ou un autre qui ne répondait pas à mes requêtes alors que d'autres le faisaient. Je pense qu'il analyse et ne répond pas si il pense que tu es un bot.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    je viens de taper l'url dans ie et je me rends compte que l'affichage met plus de temps que les autres. J'en déduis que l'attente du readline n'est pas assez importante par rapport au temps de réponse du serveur, je vais essayé de modifier ça.

  11. #11
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Moi ça n'avait pas marché, même en mettant 25mn...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  12. #12
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    La RFC HTTP 1.1 précise qu'il faut utiliser \r\n (CRLF) comme marqueur de fin de ligne et non \n tout seul. Il se pourrait donc que ta requête ne soit pas prise en compte car le serveur n'en voit pas la fin. De fait il ne peut rien te renvoyer puisqu'il considère que tu es toujours en train d'écrire ta requête.

    Change tes \n\n en \r\n\r\n et essaye à nouveau.
    Romain Guy
    Android - Mon livre - Mon blog

  13. #13
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    Merci beaucoup j'ai une réponse du serveur maintenant, 402 unauthorized donc c'est cool. Va falloir arrêter le serveur qu'on voit si ça répond bien faux quand c'est arrêté !!!

    Merci encore mille fois !!!

    PS : mon projet va être diffusé sur sourceforge au cours de la semaine prochaine.

  14. #14
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Pffff s'il faut lire les RFC pour implémenter des protocoles maintenant...

    Bon ceci explique sans doute cela, si j'ai le temps un jour je reprendrais mes prog pour vérifier
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

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

Discussions similaires

  1. [IntraWeb] Application a exécuter avec une Url
    Par aityahia dans le forum Delphi
    Réponses: 5
    Dernier message: 21/06/2006, 17h16
  2. [Debutant] envoi d'un message POST avec une URL
    Par Yannos94 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 14/06/2006, 11h22
  3. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 23h02
  4. [C#] Comment récuper un page xml avec une URL
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/02/2005, 17h17
  5. Réponses: 1
    Dernier message: 18/06/2004, 02h12

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