authentification proxy http 407 requise: comment gérer dans le code java


System.setProperty("http.proxySet", "true");
System.setProperty("java.net.useSystemProxies", "true");
System.setProperty("http.proxyHost", "192.168.1.103");
System.setProperty("http.proxyPort", "3128");
System.setProperty("http.proxyUser", "user123");
System.setProperty("http.proxyPassword", "passwD123");

url = new URL("http://www.google.co.in");

Chaque fois que j'utilise ce code, IOException lance le code de réponse HTTP 407. HTTP 407 signifie authentification proxy requise. pourquoi ce problème arrive pendant que je mets proxyUser et proxyPassword. entrez la description de l'image ici
http 401 se produira si je mets un mauvais mot de passe mais il me donne toujours 407, signifie que mon code ne prend pas le nom d'utilisateur et le mot de passe. Dans le code ci-dessus, user123 est le nom d'utilisateur et passwD123 est le mot de passe pour l'authentification proxy.

Author: dayitv89, 2013-01-01

3 answers

Http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html

J'ai trouvé la solution merci M. Vinod Singh.

Authentification proxy en Java

Les réseaux d'entreprise habituels fournissent un accès Internet via des serveurs proxy et nécessitent parfois une authentification. Les applications peuvent ouvrir les connexions aux serveurs externes à l'intranet de l'entreprise. Il faut donc faire l'authentification proxy par programme. Heureusement Java fournit un mécanisme transparent pour faire des authentifications de proxy.

Créez une classe simple comme ci-dessous -

import java.net.Authenticator;

class ProxyAuthenticator extends Authenticator {

    private String user, password;

    public ProxyAuthenticator(String user, String password) {
        this.user = user;
        this.password = password;
    }

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, password.toCharArray());
    }
}

Et mettez ces lignes de code avant que votre code ouvre une URLConnection -

Authenticator.setDefault(new ProxyAuthenticator("user", "password"));
System.setProperty("http.proxyHost", "proxy host");
System.setProperty("http.proxyPort", "port");

Maintenant tous les appels passeront avec succès par l'authentification de proxy.

 18
Author: dayitv89, 2013-01-01 20:57:56

@ GauravDS Vous avez mentionné:

Http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html J'ai trouvé la solution grâce à M. Vinod Singh. Authentification Proxy en Java Les réseaux d'entreprise habituels fournissent un accès Internet via des serveurs proxy et nécessitent parfois une authentification. Les applications peuvent ouvrir les connexions aux serveurs externes à l'intranet de l'entreprise. Il faut donc faire l'authentification proxy par programme. Heureusement Java fournit un mécanisme transparent pour faire des authentifications de proxy. Créez une classe simple comme ci-dessous- .
.
.
et mettez ces lignes de code avant que votre code n'ouvre une URLConnection- Authenticator.setDefault(new ProxyAuthenticator("user", "password")); System.setProperty("http.proxyHost", "proxy host"); System.setProperty("http.proxyPort", "port"); Maintenant, tous les appels passeront avec succès par l'authentification proxy.

Que se passe-t-il si le site auquel vous vous connectez nécessite également un nom d'utilisateur/mot de passe pour vous permettre. Définition d'un authentificateur par défaut(Authenticator.setDefault) échouera je suppose que lorsque le site externe recherchera authentifié utilisateur.

Des vues?....Quelqu'un ?

Modifier: 1 Utilisé ce code plus tôt et obtenait l'erreur (407) Authentification proxy requise. Je crois que c'était parce que l'authentification a été demandée par différents hôtes. et lorsque vous définissez un authentificateur par défaut avec un utilisateur/passe pour un hôte, l'authentification échouera pour un autre hôte demandeur. J'ai fait le changement suivant hier en classe SimpleAuthenticator et maintenant cela fonctionne comme un charme.

   protected PasswordAuthentication getPasswordAuthentication()
   {
    String requestingHost = getRequestingHost();
    if (requestingHost == proxyHost){
        System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost );
        return new PasswordAuthentication(proxyuser,proxypass.toCharArray());
    }
    else{
        System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost );
        return new PasswordAuthentication(sharepointusername,sharepointpassword.toCharArray());
    }

   }

Plus d'infos ici: http://blog.ashwani.co.in/blog/2013-07-29/access-sharepoint-webservices-from-java-behind-proxy/

 7
Author: TheAshwaniK, 2013-07-30 11:10:42

La réponse à utiliser un Authenticator est correcte pour le cas général. Cependant, une autre cause de HTTP 407 dans Java 8u111 et versions ultérieures est si vous utilisez l'authentification de BASE contre le proxy.

Dans ce cas, ajoutez cette propriété système:

-Djdk.http.auth.tunneling.disabledSchemes=

J'ai découvert cela à partir de: https://confluence.atlassian.com/kb/basic-authentication-fails-for-outgoing-proxy-in-java-8u111-909643110.html

 2
Author: Dan Gravell, 2017-12-01 09:24:43