2010-03-25 5 views
3

J'ai une instance HttpClient qui est partagée par un certain nombre de threads. Je voudrais l'utiliser pour faire une seule demande authentifiée. Étant donné que seule la requête unique doit être authentifiée, je ne souhaite pas modifier l'instance HttpClient comme décrit dans le documentation. Voici ce que j'ai travaillé à la place, qui ne fonctionne pas. D'après ce que je peux dire, il ne semble pas que le CredentialsProvider soit utilisé. Des conseils?Authentification d'une seule requête avec httpclient 4.x

HttpContext context = null; 
if(feedSpec.isAuthenticated()) { 
    context = new BasicHttpContext(); 
    CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
    credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(feedSpec.getHttpUsername(), feedSpec.getHttpPassword())); 
    context.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider); 
    context.setAttribute(ClientPNames.HANDLE_AUTHENTICATION, true); 
} 
HttpGet httpGet = new HttpGet(feedSpec.getUri()); 
HttpResponse httpResponse = httpClient.execute(httpGet, context); 
+0

Quel type d'authentification utilisez-vous? BASIC, DIGEST, FORMULAIRE? – rodrigoap

+0

authentification de base –

+3

HttpClient 4 est un gâchis terrible, IMO. Cela promettait beaucoup, mais c'est stupidement difficile à utiliser pour des cas assez simples. Je colle avec v3. – skaffman

Répondre

3

Il s'avère que le serveur auquel je me connectais n'offrait que l'authentification NTLM. J'ai implémenté l'authentification NTLM en utilisant le guide here. J'ai modifié le code indiqué dans ma question pour ressembler à cela et cela fonctionne:

HttpContext context = null; 
if(feedSpec.isAuthenticated()) { 
    context = new BasicHttpContext(); 
    CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
    credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(feedSpec.getHttpUsername(), feedSpec.getHttpPassword(), "", "")); 
    context.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider); 
} 
HttpGet httpGet = new HttpGet(feedSpec.getUri()); 
HttpResponse httpResponse = httpClient.execute(httpGet, context); 
+1

L'URL du guide lié dans ce commentaire a changé, et est maintenant: http://hc.apache.org/httpcomponents-client-ga/ntlm.html – avernet

+0

J'ai mis à jour ma réponse. –

Questions connexes