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

API standards et tierces Java Discussion :

passer par un proxy avec mdp avec la classe URL :( [FAQ]


Sujet :

API standards et tierces Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut passer par un proxy avec mdp avec la classe URL :(
    Bonjour, j'ais actuellement un probleme pour passer par un proxy avec la classe URL. Voici la méthode que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    //On créer l'URL
    URL u = URL("http",proxyHost,proxyPort,adresse);
    // on etablie une connection a cette url
    URLConnection uc = u.openConnection();
    //On set le mot de passe
    uc.setRequestProperty("Proxy-Authorization", 
    "Basic " + 
    new sun.misc.BASE64Encoder().encodeBuffer(
    new String(proxyUser + ":" + proxyPass).getBytes()));
    // on y cree un flux de lecture
    InputStream in = uc.getInputStream();
    ...
    Le problème c'est que lorsque j'execute le code, ceci m'apparais dans la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...\frame_main.java:2225: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                                                            new sun.misc.BASE64Encoder().encodeBuffer(
    ...\frame_search_info.java:1874: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                                                            new sun.misc.BASE64Encoder().encodeBuffer(
    ...\frame_search_info.java:1912: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                                                            new sun.misc.BASE64Encoder().encodeBuffer(
    3 warnings
    Avez vous une autre méthode pour passer par un proxy avec mot de passe qui utilise la classe URL ?
    Ou avez vous une solution à ce pb ?
    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2004
    Messages : 327
    Points : 487
    Points
    487
    Par défaut
    Citation Envoyé par lex13
    Bonjour, j'ais actuellement un probleme pour passer par un proxy avec la classe URL. Voici la méthode que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    //On créer l'URL
    URL u = URL("http",proxyHost,proxyPort,adresse);
    // on etablie une connection a cette url
    URLConnection uc = u.openConnection();
    //On set le mot de passe
    uc.setRequestProperty("Proxy-Authorization", 
    "Basic " + 
    new sun.misc.BASE64Encoder().encodeBuffer(
    new String(proxyUser + ":" + proxyPass).getBytes()));
    // on y cree un flux de lecture
    InputStream in = uc.getInputStream();
    ...
    Le problème c'est que lorsque j'execute le code, ceci m'apparais dans la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...\frame_main.java:2225: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                                                            new sun.misc.BASE64Encoder().encodeBuffer(
    ...\frame_search_info.java:1874: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                                                            new sun.misc.BASE64Encoder().encodeBuffer(
    ...\frame_search_info.java:1912: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                                                            new sun.misc.BASE64Encoder().encodeBuffer(
    3 warnings
    Avez vous une autre méthode pour passer par un proxy avec mot de passe qui utilise la classe URL ?
    Ou avez vous une solution à ce pb ?
    Merci d'avance
    Que vient faire le Base64 dans ton code ??
    J'utilise ce code qui marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    URLConnection uc = null;
    final String PROXY_HOST = "xxx.xxx.xx.xx";    
    final String PROXY_PORT = "8080";
     
    Authenticator.setDefault(new MyAuthenticator());
    Properties systemProperties = System.getProperties();
    systemProperties.setProperty("http.proxyHost", PROXY_HOST);
    systemProperties.setProperty("http.proxyPort", PROXY_PORT);
    .....
    uc = url.openConnection();
    ...
    Et, la classe MyAuthenticator qui va bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    class MyAuthenticator extends Authenticator {
     
     protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication("user", "password".toCharArray());
     }	
    }

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    En complément : ces warnings te signale que ton code utilise des classes du packages sun.*. Ce package (tout comme com.sun.*) n'est pas du tout standard et est spécifique à Sun.

    Les classes de ces packages sont utiliser par la JVM pour implémenter certaines fonctionnalité, et il ne faut pas les utiliser directement pour plusieurs raisons :
    • Elle n'existe pas dans les autres JVMs (IBM, Apple, etc.), et donc ton programme Java ne fonctionnera pas sur ces JVM...
    • Ces classes peuvent très bien évolué ou disparaitre même de la JVM de Sun, et donc provoquer des plantages de ton application


    Bref si tu veux du code vraiment portable (et non pas lié à une version spécifique de la JVM), il faut éviter d'utiliser ces packages...



    Quand à la solution, elle était partiellement dans la FAQ : Comment spécifier un proxy pour se connecter à un serveur ?

    Il faudrait juste étendre la solution avec l'Authenticator comme l'indique tesla.


    Sinon avec Java 5.0 on pourrait se tourner vers les classes java.net.Proxy et java.net.ProxySelector qui semble permettre de gérer les proxy...


    a++

    [edit] J'ai taggé FAQ pour qu'elle soit mise à jour avec les info de cette discussion

  4. #4
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Merci pour ces conseils ! et ce lien

    mais je me pose une question :
    Comment savoir que c'est le propertie systemProperties que l'URL va utiliser pour se connecter et non pas le propertie par défaut ?

    Ne vaut il pas mieux mettre directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperties(...)
    que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Properties systemProperties = System.getProperties();
    systemProperties.setProperties(...)

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Cela revient au même.
    Lorsque tu modifies l'objet renvoyé par getProperties() tu modifies les propriétés systèmes de Java

    a++

  6. #6
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    ok !

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

Discussions similaires

  1. [Proxy] Passer par un proxy en utilisant un fichier proxy.pac
    Par Djobird dans le forum Services Web
    Réponses: 1
    Dernier message: 17/09/2010, 14h50
  2. FTP passer par un proxy
    Par laurent.c123 dans le forum Unix
    Réponses: 1
    Dernier message: 09/04/2008, 01h35
  3. [PHP-JS] Problème de socket, passer par un proxy
    Par Kruggs dans le forum Langage
    Réponses: 1
    Dernier message: 13/07/2007, 01h15
  4. Linux, passer par un proxy SOCKS 5 ?
    Par ramislebob dans le forum Administration système
    Réponses: 1
    Dernier message: 01/10/2006, 15h55
  5. Configuration pour ne pas passer par le proxy
    Par Worldofdada dans le forum JWS
    Réponses: 5
    Dernier message: 10/11/2005, 19h54

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