comment passer un proxy en s'authentifiant ---> erreur 407

comment passer un proxy en s'authentifiant ---> erreur 407 - Java - Programmation

Marsh Posté le 09-03-2004 à 10:17:39    

ma classe doit télécharger un site à travers un proxy mais je n'arrive pas à le passer.
 

Citation :


import java.io.*;
import java.net.*;
 
public class UnAttrapeURL
{
 URLConnection saCon;
   String id="sd16v:jzkjzz";  
   
 public UnAttrapeURL(String telURL)
 {
  //définition du proxy pour le système
  System.setProperty("proxySet","true" );
  System.setProperty("http.proxyHost","192.0.2.1" );
  System.setProperty("http.proxyPort","3128" );  
    String encodedPassword = base64Encode(id);
  saCon.setRequestProperty( "Proxy-Authorization", encodedPassword );
     
    //System.setProperty("http.proxyUser","sd16v" );
  //System.setProperty("http.proxyPassword","jzkjzz" );  
 
    //définition des paramètres de l'URLConnection
  try{saCon=(new URL(telURL)).openConnection();
     saCon.setDoInput(true);
     saCon.setDoOutput(false);
     saCon.setRequestProperty("Proxy-Authorization", encodedPassword);
     saCon.connect();}
    catch(Exception e){e.printStackTrace();}
   
  //définition des flux
  InputStream in=null;
  OutputStream out=null;
  try{in = saCon.getInputStream();
   out=new FileOutputStream("toto" );}
  catch(Exception e){e.printStackTrace();}
   
  //boucle de lecture des données
  byte[] tampon = new byte[4096];
  int octets_lus;
  try{while((octets_lus=in.read(tampon)) != -1)
    out.write(tampon,0,octets_lus);}
  catch (Exception e){e.printStackTrace();}
   
  //fermeture des flux
  try{in.close();
   out.close();}  
  catch (Exception e){e.printStackTrace();}
 }
 
 public static void main(String[] telsArgs)
 {
  new UnAttrapeURL("http://www.wanadoo.fr" );
 }
}


 
j'ai une levée d'exception erreur407 dans le try qd je fais saCon.getInputStream(). J'ai trouvé sur le net qu'il fallait encodé en base64 le login et le password, c'est obligatoire ?
 
si oui, pouvez vous m'indiquer ou trouver une class qui encode en base64 parce que je n'en ai pas trouvée.
 
 
merci

Reply

Marsh Posté le 09-03-2004 à 10:17:39   

Reply

Marsh Posté le 09-03-2004 à 10:25:40    

Reply

Marsh Posté le 09-03-2004 à 10:36:50    

en fait tu es pas le premier, lis ce topic :jap:
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
 
edit: pour la Base 64, je l'ai fais avec une classe de Sun


Message édité par uriel le 09-03-2004 à 10:37:50

---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 10:54:09    

oui mais j'ai deja cherché sur le site de sun base64Encoder mais je ne la trouve pas !!!
c vraiment floue tt ca :s
 
si vous avez ette classe, vous pouvez me la mettre sur un ftp svp?

Reply

Marsh Posté le 09-03-2004 à 10:59:08    

uriel a écrit :

edit: pour la Base 64, je l'ai fais avec une classe de Sun  


mais c'est super mal ca  [:mlc2]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 10:59:28    

supertimor2k a écrit :

si vous avez ette classe, vous pouvez me la mettre sur un ftp svp?


 :heink: il te va pas le lien que je t'ai filé ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 11:06:23    

benou a écrit :


mais c'est super mal ca  [:mlc2]  


 
pourquoi :??:  
 
j'ai pris celle ci sun.misc.BASE64Encoder  et ca marche tres bien  [:spamafote]


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 11:11:14    

uriel a écrit :


pourquoi :??:  
 
j'ai pris celle ci sun.misc.BASE64Encoder  et ca marche tres bien  [:spamafote]  


c'est des packages cachés auxquels tu n'es pas sensé faire référence : rien ne garantit que ces classes seront (ou ont été) présentes dans les versions futures (ou passées) de java.
 
Sans dire que si on essaye de faire tourner ton prog sur une autre jvm que celle de Sun il va planter.
 
Bref, c'est une très mauvaise idée


Message édité par benou le 09-03-2004 à 11:11:49

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 11:13:21    

ok, je le note, mais comme là c'etait juste pour moi pour un projet perso qui tourne sur ma machine, ca va, mais merci :jap:
 
mais ca veut dire quoi, ce sont des packages cachés, on trouve des references à ce package partout sur le net :/
 
pourquoi integré un package que tout le monde peut utiliser, si personne doit le faire  [:spamafote]


Message édité par uriel le 09-03-2004 à 11:14:46

---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 11:18:40    

uriel a écrit :

mais ca veut dire quoi, ce sont des packages cachés, on trouve des references à ce package partout sur le net :/


C'est des packages qui servent à l'implémentations de sun de l'API java.
 
A quoi ca sert qu'il y ait une API standard si c'est pour utiliser des implémentations spécifiques derrière ? :/
 
C'est des packages cachés, ca veut dire que tu n'es pas sensé savoir qu'ils existent. D'ailleur, tu ne trouveras pas de javadoc ni les sources de ces classes parce que c'est des classes de sun. Des classes internes à leur implémentation java.  
 
Et c'est pas parce que plein de gens font des conneries sur le net qu'il faut faire les même qu'eux :o
 
Surtout pour un truc aussi concon qu'un encodage Base64 ...
 
Y a des truc pour lesquels t'es plus ou moins obligé (ex : compilation dynamique), mais pour du base 64, là je dis non :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 11:18:40   

Reply

Marsh Posté le 09-03-2004 à 11:22:55    

[:sisicaivrai] ok, jle ferais plus...


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 11:26:40    

benou a écrit :


Surtout pour un truc aussi concon qu'un encodage Base64 ...


C'est pour ça que je trouve immensément débile de foutre ça en package sun et pas en java.util.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 11:41:24    

Taiche a écrit :


C'est pour ça que je trouve immensément débile de foutre ça en package sun et pas en java.util.


 
[:benou_+1]


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 11:52:52    

Taiche a écrit :


C'est pour ça que je trouve immensément débile de foutre ça en package sun et pas en java.util.


Le fait que ce soit dans un package sun t'es^même pas sensé le savoir ... maintenant tu peux trouver dommage qu'il n'aient pas ajouter une classe utilitaire pour faire ca dans l'api, mais c'est un autre problème ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 11:54:21    

uriel a écrit :

[:sisicaivrai] ok, jle ferais plus...


sinon panpan kuku :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 12:10:30    

benou a écrit :


Le fait que ce soit dans un package sun t'es^même pas sensé le savoir ... maintenant tu peux trouver dommage qu'il n'aient pas ajouter une classe utilitaire pour faire ca dans l'api, mais c'est un autre problème ...


Ouais 'fin faut arrête les abus, aussi. Encoder/décoder du Base64, c'est pas THE algo de le mort à protéger coûte que coûte ; qu'ils cachent des conneries genre HTTPS ou gestion de certificats j'veux bien comprendre, m'enfin le Base64... [:kiki] En plus y a pas d'appel natif (en tout cas j'espère pour eux [:xx_xx]) donc franchement, j'vois absolument pas l'intérêt de cacher une telle classe.
Enfin, que je sois pas censé le savoir, j'en ai rien à battre ; non seulement c'est un secret de polichinelle à 2 balles mais en plus ça veut strictement rien dire de cacher un truc pareil [:spamafote]


Message édité par Taiche le 09-03-2004 à 12:10:51

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 12:12:26    

benou le lien que tu m'as filé est bon mais je ne vois pas ou la telecharger....
je regarde à nouveau :)

Reply

Marsh Posté le 09-03-2004 à 13:05:39    

Taiche a écrit :

Enfin, que je sois pas censé le savoir, j'en ai rien à battre ; non seulement c'est un secret de polichinelle à 2 balles mais en plus ça veut strictement rien dire de cacher un truc pareil [:spamafote]


t'as pas compris ce que je voulais dire.
Ce que je dis c'est que la calsse Base 64 répond à un besoin interne de l'implémentation de sun.  
 
le truc c'est pas de cacher ou de ne pas cacher c'est de définir une API. L'API, en l'état n'offre pas de possibilité de faire du Base64. C'est contre ce point là que vous pouvez éventuellemnt raller.
 
Mais ca n'a rien à voir (si on peut dire) avec le fait qu'il y ait une classe qui fasse ca dans un des jars du jre. Je suis sûr qu'il y a plein d'autres classes dans ces jars qui sont bein pratiques. Mais c'est pas parce que quelqu'un a développé quelque part une classe pratique qu'elle doit forcément être dans l'API standard. Le problème c'est pas de cacher ou non : la définition de l'API ne se fait pas en fonction des implémentations de l'API et des classes qu'elle peut éventuellement contenir.
 
je sais pas si je vais arriver à me faire comprendre ...
 
 
pour le download de du base64 made in apache : http://jakarta.apache.org/commons/codec/ (rubrique download)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 13:36:48    

benou a écrit :


je sais pas si je vais arriver à me faire comprendre ...


Si j'pige bien, sauf que Base64 est quand même quelque chose de super utilisé et que quand on fournit des moyens de passer les proxies, on va jusqu'au bout. Sans Base64, t'es mort. Idem, dans une moindre mesure, pour passer du binaire dans du XML. Pareil pour javamail et les fichiers attachés.
Bref, la classe étant justement implémentée en interne, ça fait un peu pouilleux et pas sérieux.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 13:39:06    

c'est surtout un truc tres util, et regulierement utilisé, il est fait mais on ne peut pas prendre celui de l'API de Sun parce qu'il est pas fait pour ca :/
 
logique que je comprends pas mais bon, pour quoi ne pas rendre toute les classes Sun accessible, ou au moins utilisable... comprends pas


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 13:39:39    

uriel a écrit :

c'est surtout un truc tres util, et regulierement utilisé, il est fait mais on ne peut pas prendre celui de l'API de Sun parce qu'il est pas fait pour ca :/
 
logique que je comprends pas mais bon, pour quoi ne pas rendre toute les classes Sun accessible, ou au moins utilisable... comprends pas


Comment j't'ai grillaid tarace :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 13:40:53    

Taiche a écrit :


Comment j't'ai grillaid tarace :o


 
j'aime bien en rajouter une couche :O


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 13:45:50    

stack ta race :o

Reply

Marsh Posté le 09-03-2004 à 13:56:15    

uriel a écrit :

pour quoi ne pas rendre toute les classes Sun accessible, ou au moins utilisable...  


mais  :sweat:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 13:57:08    

benou a écrit :


mais  :sweat:  


 
je sais bien qu'elles sont accessible, je disais pourquoi ne pas les integrer dans l'API normalement :O


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 13:59:56    

uriel a écrit :


pourquoi ne pas les integrer dans l'API normalement :O


Parce que une API c'est pas un foure-tout [:spamafote]
 
mais je suis d'accord que le Base64 pourrait être présent, tout comme l'est le URLEncoder ...
 
Pour répondre à Taiche, je me souviens d'un topic où quelqu'un avait donné du code pour s'authentifier auprès d'un proxy sans utiliser de base64 en utilisant des classes de l'API ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 14:02:21    

je serais curieux de le retrouver, je m'en sert pour passer en https avec .htacess, et le mot de passe est en Base64 :??:


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 14:06:14    

+12 :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 14:09:36    

j'ai checrhé, je le retrouve pas :(


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 14:15:21    

Reply

Marsh Posté le 09-03-2004 à 14:17:15    


 

Code :
  1. writer.write("Proxy-Authorization: Basic "
  2.              + new sun.misc.BASE64Encoder().encode(
  3.                authentication.getBytes())
  4.              + "\r\n\r\n" );


 
[:ban]


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 14:19:16    

[:grinking]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 15:08:57    


t'as lu un peu avant de faire un ctrl f "base64" ? [:kiki]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 15:10:27    

benou a écrit :


t'as lu un peu avant de faire un ctrl f "base64" ? [:kiki]


 
oui, et justement, il propose cette solution  [:spamafote]  

Citation :


My solution is to roll out my own implementation of the HTTP protocol. In its simplest form, a GET request looks like the following listing:
 
String url = "http://www.marchal.com/",
       proxy = "proxy.mydomain.com",
       port = "8080",
       authentication = "usr:pwd";
URL server = new URL(url);
Socket socket = new Socket(proxy,port);
Writer writer = new OutputStreamWriter(socket.getOutputStream(),
                                       "US-ASCII" );
writer.write("GET " + server.toExternalForm() + " HTTP/1.0\r\n" );
writer.write("Host: " + server.getHost() + "\r\n" );
writer.write("Proxy-Authorization: Basic "
             + new sun.misc.BASE64Encoder().encode(
               authentication.getBytes())
             + "\r\n\r\n" );
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(
                            socket.getInputStream(),"US-ASCII" ));
String line = reader.readLine();
if(line != null && line.startsWith("HTTP/" ))
{
   int sp = line.indexOf(' ');
   String status = line.substring(sp + 1,sp + 4);
   if(status.equals("200" ))
   {
      while(line.length() != 0)
         line = reader.readLine();
      readResponse(reader);
   }
   else
      throw new FileNotFoundException("Host reports error " +
                                       status);
}
else
   throw new IOException("Bad protocol" );
reader.close();
writer.close();
socket.close();
 
 
 
Notice that the proxy username and password are given as username:password and are later encoded in base 64. For a complete description of the HTTP protocol, turn to http://www.ietf.org/rfc/rfc2616.txt.


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 15:11:53    

uriel a écrit :


oui, et justement, il propose cette solution  


mais ... regarde juste au dessus  :cry:
 
edit : ca :

Citation :

public class SimpleAuthenticator
   extends Authenticator
{
   private String username,
                  password;
                     
   public SimpleAuthenticator(String username,String password)
   {
      this.username = username;
      this.password = password;
   }
   
   protected PasswordAuthentication getPasswordAuthentication()
   {
      return new PasswordAuthentication(
             username,password.toCharArray());
   }
}
 
Next, it must register the authenticator through Authenticator.setDefault(). If we adapt the previous code sample to use Authenticator, it looks like this:
 
String url = "http://www.marchal.com/",
       proxy = "proxy.mydomain.com",
       port = "8080",
       username = "usr",
       password = "pwd";
Authenticator.setDefault(new SimpleAuthenticator(
                        username,password));
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (
    HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);
 


Message édité par benou le 09-03-2004 à 15:12:28

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 15:14:37    

je capte pas comment ce truc peut fonctionner :/


---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 15:17:28    

uriel a écrit :

je capte pas comment ce truc peut fonctionner :/


pkoi ca marcherait pas ?
 
Perso je trouve ca pareil que le paramétrage du proxy en variable système (ce qui est vraiment n'importe quoi, soit dit en passant)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-03-2004 à 15:18:59    

Ah ui, c'est vrai, l'Authenticator ! En plus, j'l'utilise dans mes classes de gestion HTTP et j'en avais parlé dans mon opic sur le HTTPS [:kiki]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 09-03-2004 à 15:19:38    

non, ce que je veux dire, c'est que l'autentification exige que le mot de passe soit en Base64, ici je vois pas comment l'autentification peut fonctionner
 
edit: bon je vais lire la doc sur l'Authenticator [:neowen]


Message édité par uriel le 09-03-2004 à 15:20:39

---------------
IVG en france
Reply

Marsh Posté le 09-03-2004 à 15:20:30    

uriel a écrit :

non, ce que je veux dire, c'est que l'autentification exige que le mot de passe soit en Base64, ici je vois pas comment l'autentification peut fonctionner  


C'est PasswordAuthentication qui le fait pour toi.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed