Şu anda ThreadSafeClientConnManager ile bir DefaultHttpClient kullanıyorum. Bu iyi çalışıyor, ancak AndroidHttpClient kullanarak bunu değiştirmek istiyorum. Maalesef, şu anda benim için önemli olan UsernamePasswordCredentials özelliğini ekleyemiyorum. Herkes bir ipucu veya çözüm sağlayabilir mi?AndroidHttpClient (API Seviye 8) ve UsernamePasswordCredentials nasıl kullanılır?
5
A
cevap
0
Kimlik doğrulaması için HttpRequestInterceptor
sınıfını kullanmanız gerekir.
İşte soru eski olduğunu biliyorum ama bu konuda tökezleyerek herkes yararına (Ben gibi) için, sen HttpGet
nesneyle başlığını kendiniz dönebilirsiniz bir örnek
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
olduğunu. Bunun gibi:
httpGet.addHeader("Authorization", "Basic " + Base64.encode(username+":"+password));
+0
Bkz. Yöntem kodlama (bayt [], int) türünde Base64 argümanlar için geçerli değildir (String) .. –
0
Saad Farooq'un cevabındaki bazı geliştirmeler, aşağıdaki kod benim için çalışıyor.
final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
getRequest = new HttpGet(url);
getRequest.addHeader("Authorization", "Basic " + Base64.encodeToString(new
String(username + ":" + password).getBytes(), Base64.NO_WRAP));
Bu yeni bir soru açar: Önleyici AndroidHttpClient'e nasıl eklenir? – lichtzeichenanlage
"AndroidHttpClient" i neden kullanmaya çalıştığınızı bana bildirir misiniz? –
Hey Tammay. Bir yandan kod bana daha temiz görünüyor, öte yandan yazmayı ve bir kereliği korumak yerine standart sınıfları kullanmayı deniyorum. Bu nedenler geçerli mi? – lichtzeichenanlage