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

Java Discussion :

URLConnection getRequestProperties() null


Sujet :

Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut URLConnection getRequestProperties() null
    Bonjour,

    j'utilise une URLConnection pour ouvrir une connection aux web Services, après quelques problèmes d'instabilité, on m'a conseillé de forcer les propriétés : connection et header aux valeurs "Keep-Alive:0" et "HTTP/1.0"...

    Seulement je ne sais pas comment fair cette opération...

    J'ai essayé déja de voir la liste des properties de l'URLConnection avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    URLConnection uc = url.openConnection();
     
    	Map map = (Map)uc.getRequestProperties();
    	Set keys = map.keySet();
    	Iterator it = keys.iterator();
    	while (it.hasNext()){
    		Object key = it.next(); 
    		System.out.println("key :"+key.toString());
    		Object value = map.get(key); 
    		System.out.println("value :"+value.toString());
    	}
    Le map renvoyé est bien null, donc je ne vois aucune propperty de mon URLConnection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uc.setRequestProperty("Connection", "Keep-Alive:0");
      uc.setRequestProperty("header","HTTP/1.0");
    J'essaie de setter les properties, mais comme elles n'existent pas, je crains que mes sets n'aient aucun effet.

    Je ne sais pas si je suis dans le bonne voix pour forcer ces 2 valeurs...

    Merci d'avance pour l'aide

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Affiches la Map après avoir fait les setRequestProperty(), et tu verras que tout est bien renseigné...

    a++

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut
    Ok, j'ai compris cela...

    Mais est ce que ces paramètres sont les bons ou pas pour une URLConnection ?? j'ai pensé que ces propriétés existaient déja, et que je ne fais que les setter, c'est la mon problème.

    je crains que mes sets n'aient aucun effet sur la connection, la preuve si je rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uc.setRequestProperty("toto", "toto");
    Ca n'a aucun effet puisque la propriété "toto" n'est jamais utilisé.

    J'espère que j'étais clair.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    En HTTP cela correspond aux headers HTTP, et tu peux très bien envoyé "toto" si tu le veux, donc c'est normal que tu puisses mettre ce que tu veux...


    Donc la seule réponse à tes question, c'est la doc : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    a++

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut
    Merci Pour ta réponse, mais j'ai pas bien compris ce que tu voulais dire.

    Pour les headers, je les récupère avec "getHeaderField(int i)" mais ils ne sont pas modifiables.

    Ma question est simple, si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLConnection uc = url.openConnection();
    Comment je peux savoir le type du protocole utilisé : "http/1.0", "http/1.1" et aussi si la connection est "Keep-Alive" ou non ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par reneguenon Voir le message
    Pour ta réponse, mais j'ai pas bien compris ce que tu voulais dire.

    Pour les headers, je les récupère avec "getHeaderField(int i)" mais ils ne sont pas modifiables.
    getHeaderField() te permet de lire les header renvoyé par la réponse.
    Ceux envoyés avec la requête correspondent aux valeurs que tu indiques via setRequestProperty()

    Citation Envoyé par reneguenon Voir le message
    Comment je peux savoir le type du protocole utilisé : "http/1.0", "http/1.1" et aussi si la connection est "Keep-Alive" ou non ?
    Via du code je n'en ai aucune idée... mais d'après mes test c'est du HTTP/1.1... donc en Keep-Alive.


    a++

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut
    Pour pour ces explications.
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Map<String,List<String>> headerFields = uc.getHeaderFields();
    	  Set<String> set = headerFields.keySet();
    	  Iterator<String> itor = set.iterator();
    	  while (itor.hasNext()) {
    	      String key = itor.next();
    	      System.out.println("Key: " + key + " / " + headerFields.get(key));
    	  }
    j'ai récupéré ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Key: null / [HTTP/1.1 200 OK]
    Key: Date / [Thu, 13 Aug 2009 11:42:18 GMT]
    Key: .KNEX_TOOL / [FALSE]
    Key: Content-Length / [9360]
    Key: Expires / [Thu, 01 Jan 1970 00:00:00 GMT]
    Key: Set-Cookie / [JSESSIONID=KD8hxk1RqbD6ykLFTzb3hqvbFk0VpTrD1DBpwPZRJptnCK8b6Lk2!770333573; path=/]
    Key: Content-Type / [text/plain; charset=utf-8]
    Key: Connection / [close]
    Key: .KNEX_ERRORS / [FALSE]
    La valeur "HTTP/1.1" semble ne pas avoir de Key, j'ai essayé de setter le header comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uc.setRequestProperty("header","HTTP/1.0");
    Mais sans succès.

    Ce que je veux, c'est forcer le protocole à "HTTP/1.0", car avec "HTTP/1.1" parfois la connection est perdue.

    Une suggestion ?

    Merci par avance

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par reneguenon Voir le message
    Ce que je veux, c'est forcer le protocole à "HTTP/1.0", car avec "HTTP/1.1" parfois la connection est perdue.
    Je n'ai aucune idée de la manière de forcer le HTTP/1.0...

    Que veux tu dire précisément par "parfois la connection est perdue" ?
    Tu réutilises la même URLConnection (pour le keep-alive) ou pas ?

    a++

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut
    J'utilise une méthode de connexion SSL aux Web Services, ca marche sauf que parfois la connexion est perdue, on a plus accès, et il faut redémarrer le serveur, l'exception est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CFSSL:SSL_accept error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate"
    on m'a conseillé de forcer le protocole en "HTTP/1.0" car avec le protocole "HTTP/1.1", il arrive que la négociation de certificat échoue.

    A+

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Il serait peut-être intéressant de te tourner vers HttpClient qui est bien plus complet et permet bien plus d'options : http://hc.apache.org/httpclient-3.x/preference-api.html

    a++

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut
    Merci pour cette doc,

    J'ai vu la comparaison entre URLConnection et HttpClient.

    Pour URLConnection le protocole HTTP/1.1 est celui par défaut à partir du JDK 1.3, donc impossible de le modifier je suis en java 6, par contre en HttpClient, c'est possible de choisir le protocole "HTTP/1.0" ou "HTTP/1.1".

    Mais le problème est que toute ma connexion au WS est basée sur URLConnection, ca voudrait dire que je vais devoir tout modifier, et ce n'est pas permis car mes librairies fournis par le fournisseur de WS utilisent URLConnection et pas HttpClient.

    A moins qu'il y ait une solution qui permet de matcher les deux. je serai donc preneur.

    a+

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/08/2013, 14h28
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17
  4. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2003, 10h00
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07

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