Attualmente sto usando un DefaultHttpClient con ThreadSafeClientConnManager. Funziona bene, ma mi piacerebbe sostituirlo usando AndroidHttpClient. Purtroppo non sono in grado di aggiungere UsernamePasswordCredentials che al momento è importante per me. Qualcuno può fornire un consiglio o una soluzione?Come utilizzare AndroidHttpClient (livello API 8) e UsernamePasswordCredentials?
5
A
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
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));
Si apre una nuova domanda: Come aggiungere l'intercettatore a AndroidHttpClient? – lichtzeichenanlage
Puoi per favore farmi sapere perché stai cercando di utilizzare 'AndroidHttpClient'? –
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