2013-03-31 7 views
2

J'essaie d'accéder à un service Web qui nécessite une authentification, mais je suis également derrière un proxy qui nécessite sa propre authentification. Capable de passer le serveur proxy car je peux obtenir des résultats lorsque l'URL du service Web n'a pas d'authentification. Toutefois, lorsqu'un service Web nécessite une authentification, il ne fonctionne tout simplement pas. je reçois l'erreur suivante:Authentification par proxy et Web service

Exception in thread "main" java.net.ProtocolException: Server redirected too many times 

Voici mon code ci-dessous:

Authenticator auth = new Authenticator() { 
    public PasswordAuthentication getPasswordAuthentication() { 

    if(getRequestorType() == Authenticator.RequestorType.PROXY) 
    { //for proxy 
     return (new PasswordAuthentication("user", "pass".toCharArray())); 
    } 
    else 
    { // for web service 
    return (new PasswordAuthentication("user2", "pass2".toCharArray())); 
    } 
    } 
    }; 
    Authenticator.setDefault(auth); 
    SocketAddress addr = new 
         InetSocketAddress("proxy addr", port no); 

    Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); 
    URL url = new URL("..."); 
    URLConnection yc = query.openConnection(proxy); 
    BufferedReader in = new BufferedReader(
          new InputStreamReader(
          yc.getInputStream())); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
     System.out.println(inputLine); 
    in.close(); 

Ceci est ma première question ici. Toute aide serait très appréciée.

+0

Votre appel demande est entré dans une boucle de redirection qui peut se produire pour deux raisons. Pour les réduire, pouvez-vous publier la requête HTTP complète + la réponse au service? –

+0

@DeepakBala Je reçois le code de réponse 302 et l'emplacement de redirection est le même que l'URL de demande http. BTW voici la demande HTTP: http://api.datamarket.azure.com/Data.ashx/Bing/Search/Composite?Sources='web'&Query='test'&$format=JSON – user2229167

Répondre

2

Les URL ne sont pas identiques. L'URL de demande utilise HTTP et l'URL de redirection utilise HTTPS. Ce qui se passe probablement, c'est que le service envoie la demande de redirection au proxy, mais le proxy continue à demander l'URL HTTP encore et encore. Certains proxies sont known to exhibit ce genre de comportement.

Passez à l'utilisation de HTTPS dans la demande initiale. Mes appels HTTP vers le serveur en question ont donné lieu à une redirection vers HTTPS alors que les appels HTTPS ont donné lieu à un 401.

HTTP/1.1 401 The authorization type you provided is not supported. Only Basic and OAuth are supported

+0

essayé votre suggestion et cela a fonctionné ! Je ne peux pas vous remercier assez pour ça. Je viens de regarder en arrière la documentation pour le serveur et il a dit d'utiliser https - je n'ai aucune idée de comment j'ai raté cela. Cependant, l'autorisation semble fonctionner pour moi, je ne comprends pas beaucoup sur Basic et OAuth, mais je vais le chercher pour en savoir plus. Vous avez économisé beaucoup de mon temps. A bientôt – user2229167

+0

Content de vous aider. À votre santé. –

Questions connexes