2011-01-29 8 views

risposta

0

È necessario utilizzare la classe HttpRequestInterceptor per l'autenticazione.

Ecco un esempio

HttpRequestInterceptor httpRequestInterceptor = new HttpRequestInterceptor() { 
    public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException { 
     AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE); 
     CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute(
       ClientContext.CREDS_PROVIDER); 
     HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST); 

     if (authState.getAuthScheme() == null) { 
      AuthScope authScope = new AuthScope(targetHost.getHostName(), targetHost.getPort()); 
      Credentials creds = credsProvider.getCredentials(authScope); 
      if (creds != null) { 
       authState.setAuthScheme(new BasicScheme()); 
       authState.setCredentials(creds); 
      } 
     } 
    }  
}; 
+0

Si apre una nuova domanda: Come aggiungere l'intercettatore a AndroidHttpClient? – lichtzeichenanlage

+0

Puoi per favore farmi sapere perché stai cercando di utilizzare 'AndroidHttpClient'? –

+0

Ehi, Tammay. Da un lato il codice mi sembra più pulito, d'altra parte cerco di usare classi standard invece di scrivere e mantenere il mio una volta. Queste ragioni sono valide? – lichtzeichenanlage

0

So che la domanda è vecchia, ma a beneficio di chiunque inciampare su questo (come ho fatto io), è possibile ripristinare l'intestazione te stesso con HttpGet oggetto. In questo modo:

httpGet.addHeader("Authorization", "Basic " + Base64.encode(username+":"+password)); 
+0

Il metodo codifica (byte [], int) nel tipo Base64 non è applicabile per gli argomenti (String) .. –

0

Alcuni miglioramento per la risposta di Saad Farooq, il seguente codice funziona per me.

final AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); 

getRequest = new HttpGet(url); 

getRequest.addHeader("Authorization", "Basic " + Base64.encodeToString(new 
       String(username + ":" + password).getBytes(), Base64.NO_WRAP)); 
Problemi correlati