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 :

[proxy] Configuration pour navigation avec un proxy


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut [proxy] Configuration pour navigation avec un proxy
    Bonjour,

    Voici un bref (et clair je l'espère ^^) exposé de mon problème :

    Je suis actuellement en train de développer une petite appli java qui doit permettre de récupérer le code html d'une page web à partir d'une url. Au début cela ne marchais qu'en local et me mettais un connection timeout si j'essayais sur le net... Après quelques recherche je me suis rendu compte que c'était le proxy de ma boite qui me bloquais car pas configuré dans mon programme. nous utilisons un proxy configuré automatiquement au moyen d'un script proxy.pac
    J'ai donc éditer ce fichier en .pac, récupéré l'adresse du proxy et son port puis j'ai configuré tout ça dans mon programme comme ceci :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.InetAddress;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.net.UnknownHostException;
     
     
    public class main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.setProperty("http.proxyHost","monProxy");
    		System.setProperty("http.proxyPort","8088"); 
    		String html = new String();
                    //Chargement du code la page web
    		html = getIpFrom("url");
    		System.out.println(html);
    		String host = "localhost";
    		int timeout = 3000;
    		boolean status=false;
    		try {
    //Ping sur une url donnée
    			 status = InetAddress.getByName(host).isReachable(timeout);
    		} catch (UnknownHostException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		System.out.println(status);
    	}
     
    	public static String getIpFrom(String adresse)
    	{
    		String toreturn = null;
    		try{
    			//Creation d'un objet URL
    			URL url = new URL(adresse);
    			//On établit une connection a cette url
    			URLConnection uc = url.openConnection();
    			//On y cree un flus de lecture
    			InputStream in = uc.getInputStream();
    			//On lit le premier bit
    			int c = in.read();
    			//On cree un string builder pour la suite y ajouter tout les bits lus
    			StringBuilder build = new StringBuilder();
    			//Tant que c n'est pas égale au bit indiquant la fin d'un flux...
    			while(c!=-1)
    			{
    				build.append((char)c);
    				//...On l'ajoute dans le string builder...
    				c=in.read();
    				//...et on lit le suivant
    			}
    			//On retourn le code de la page
    			toreturn = build.toString();
    		}
    		catch(MalformedURLException e){
    			e.printStackTrace();
    			}
    		catch(IOException e){
    			e.printStackTrace();
    		}
    		return toreturn;
    	}
     
    }
    résultat ça marche très bien pour le web mais du coup cela ne marche plus en local..

    A noter que c'est l'inverse pour la partie de mon code qui effectue un ping... ça marche en local mais pas sur le net...

    Du coup après retour sur le script de configuration du proxy, il apparait que le nom de celui-ci est différent selon l'url que l'on veut... est-il possible de configurer directement mon programme en intégrant le dit script?

    Merci d'avance de vos participations

    edit : lorsque je tente de récupérer le contenue html d'une page en local, voici le message d'erreur :
    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
    java.net.ConnectException: Connection refused: connect
    	at java.net.PlainSocketImpl.socketConnect(Native Method)
    	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    	at java.net.Socket.connect(Socket.java:520)
    	at java.net.Socket.connect(Socket.java:470)
    	at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
    	at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)
    	at sun.net.www.http.HttpClient.openServer(HttpClient.java:523)
    	at sun.net.www.http.HttpClient.<init>(HttpClient.java:231)
    	at sun.net.www.http.HttpClient.New(HttpClient.java:304)
    	at sun.net.www.http.HttpClient.New(HttpClient.java:321)
    	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:813)
    	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:765)
    	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:690)
    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:934)
    	at main.getIpFrom(main.java:46)
    	at main.main(main.java:20)

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    Bien je me répond à moi même (on est jamais mieux aider que par soi même ^^)

    Le problème venait en fait du nom de proxy... en effet, le script appel différent noms suivant le protocole voulu (proxy-internet, proxy-intranet...) il m'à juste suffit de mettre le nom de base (proxy) et j'ai accès à toutes les pages, locales comme internet...

    Par contre le problème demeure pour le ping... j'arrive à pinguer uniquement sur une adresse locale.. le ping revient négatif (status = false) lorsque je tente une adresse extérieure (developpez.net au hasard ^^)

    Je remet le code de la partie ping uniquement pour une meilleure compréhension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String host = "developpez.net";
    		int timeout = 3000;
    		boolean status=false;
    		try {
    			 status = InetAddress.getByName(host).isReachable(timeout);
    		} catch (UnknownHostException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		System.out.println(status);

    Edit : Ce même ping avec l'invite de commande (ping developpez.net) marche parfaitement

    re-edit : tien ça ne marche pas non plus avec une url de type https... apparemment des histoires de certificats etc.. je pense avoir trouvé la solution ici : http://www.developpez.net/forums/d24...tps-via-proxy/
    mais la il commence à se faire faim ^^ je tenterais ceci demain

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    C'est re-moi!!!!!!
    Bon au si jamais quelqu'un avais le même problème que moi (accès en https) voici la solution :

    ce n'est à mon sens pas la meilleure solution mais pour moi ça marche et vu ce que je compte faire ça ne pose pas de problèmes, il suffit de "shunter" la vérification de certificats comme ceci :

    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
    51
    52
    53
    54
    55
    56
    57
    String toreturn = null;
    		try{
     
    			//Remplace le vérifieur de nom d'hôte par un autre moins restrictif
    		    HostnameVerifier hostnameVerifier=new HostnameVerifier(){
    		        public boolean verify(String urlHostName,SSLSession session){
    		            return true;
    		        }
    		    };
    		    HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
     
    		    //Remplace le vérifieur de certificat par un autre moins restrictif
    		    TrustManager[] trustAllCerts=new TrustManager[]{
    		        new X509TrustManager(){
    		            public java.security.cert.X509Certificate[] getAcceptedIssuers(){return null;}
    		            public void checkClientTrusted(java.security.cert.X509Certificate[] certs,String authType){}
    		            public void checkServerTrusted(java.security.cert.X509Certificate[] certs,String authType){}
    		        }
    		    };
    		    SSLContext sslContext=SSLContext.getInstance("SSL");
    		    sslContext.init(null,trustAllCerts,new java.security.SecureRandom());
    		    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());            
     
     
    		    //Chargement de la page...
    			//Creation d'un objet URL
    			URL url = new URL(adresse);
    			//On établit une connection a cette url
    			URLConnection uc = url.openConnection();
    			//On y cree un flux de lecture
    			InputStream in = uc.getInputStream();
    			//On lit le premier bit
    			int c = in.read();
    			//On cree un string builder pour la suite y ajouter tout les bits lus
    			StringBuilder build = new StringBuilder();
    			//Tant que c n'est pas égale au bit indiquant la fin d'un flux...
    			while(c!=-1)
    			{
    				build.append((char)c);
    				//...On l'ajoute dans le string builder...
    				c=in.read();
    				//...et on lit le suivant
    			}
    			//On retourne le code de la page
    			toreturn = build.toString();
    		}
    		catch(MalformedURLException e){
    			e.printStackTrace();
    			}
    		catch(IOException e){
    			e.printStackTrace();
    		} catch (KeyManagementException e) {
    			e.printStackTrace();
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		}
    		return toreturn;
    Par contre j'ai toujours le problèmes avec la ligne InetAddress.getByName(host).isReachable(timeout) qui me renvoie false pour toute adresse excepté une adresse en local... Si jamais quelqu'un à une idée...

Discussions similaires

  1. Configuration pour compilation avec IPP
    Par zuzuu dans le forum Eclipse C & C++
    Réponses: 0
    Dernier message: 10/09/2010, 13h00
  2. [EMF] - Navigation avec les proxies (HREF)
    Par Pikouse dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 12/01/2010, 10h44
  3. Réponses: 10
    Dernier message: 20/02/2008, 13h03
  4. [XHTML] [Débutant] Aide pour navigation avec cadres
    Par calogerogigante dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 19/06/2006, 00h43
  5. Configuration pour ne pas passer par le proxy
    Par Worldofdada dans le forum JWS
    Réponses: 5
    Dernier message: 10/11/2005, 20h54

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