2011-07-15 34 views
14
benim kod iyi çalışıyordu ama benim eski kod çalışmıyor şimdi sunucu Digest kimlik doğrulaması değişti böylece Basic kimlik denetiminde bir server.Initially sunucusu üzerinden kullanıcı adı/parola kimlik doğrulaması ediyorum nerede bir Android uygulaması oluşturma

.Android'de Digest kimlik doğrulaması nasıl kullanılır?

Digest kimlik doğrulamasını kullanmak için ne gibi değişiklikler yapılmalıdır?

private boolean authenticateUser() 

{ 

    try 
    { 
     String url_str = "http://serverweb.com/checkauthentication.php"; 

     HttpPost post = new HttpPost(url_str); 

     Log.v("AUTHENTICATION URL = ", url_str); 
     post.addHeader("Authorization","Basic "+getCredentials()); 
     ResponseHandler<String> responseHandler=new BasicResponseHandler(); 
     String response_body = client.execute(post, responseHandler); 

     Log.v("SERVER RESPONSE DATA = ", response_body); 

     XMLDataParser.parseXML(XMLDataParser.USER_INFORMATION_PARSER_CODE, response_body); 

     List<Cookie> cookies = client.getCookieStore().getCookies(); 
     if (!cookies.isEmpty()) 
     { 
     for (int i = 0; i < cookies.size(); i++) 
     { 
      XMLData.cookie = cookies.get(i); 
     } 
     } 

     return true; 
    } 
    catch (MalformedURLException mue) 
    { 
     Log.i("MalformedURLException", " "+mue.getMessage()); 
     displayDialog("User Does Not exist"); 
     return false; 
    } 
    catch (IOException ioe) 
    { 
     Log.i("IOException", " "+ioe.getMessage()); 
     displayDialog("User Does Not exist"); 
     return false; 
    } 
    catch (Exception e) 
    { 
     Log.i("Exception", " "+e.getMessage()); 
     displayDialog("Error"); 
     return false; 
    } 
} 
private String getCredentials() 
{ 
    String u=edit_username.getText().toString(); 
    String p=edit_password.getText().toString(); 

    Log.v("USER NAME = ",u); 
    Log.v("PASSWORD = ",p); 
    return(Base64.encodeBytes((u+":"+p).getBytes())); 
} 
+0

gerçek değil. –

+0

çalışmıyor

private class TestHttpThread extends AsyncTask<String, Void, Void>{ @Override protected Void doInBackground(String... params) { if(params.length > 0){ String url = params[0]; String username = params[1]; String password = params[2]; try { AndroidHttpClient httpClient = AndroidHttpClient.newInstance("test user agent"); URL urlObj = new URL(url); HttpHost host = new HttpHost(urlObj.getHost(), urlObj.getPort(), urlObj.getProtocol()); AuthScope scope = new AuthScope(urlObj.getHost(), urlObj.getPort()); UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password); CredentialsProvider cp = new BasicCredentialsProvider(); cp.setCredentials(scope, creds); HttpContext credContext = new BasicHttpContext(); credContext.setAttribute(ClientContext.CREDS_PROVIDER, cp); HttpGet job = new HttpGet(url); HttpResponse response = httpClient.execute(host,job,credContext); StatusLine status = response.getStatusLine(); Log.d(TestActivity.TEST_TAG, status.toString()); httpClient.close(); } catch(Exception e){ e.printStackTrace(); } } return null; } } 
AB1209

cevap

15

Gerekli kimlik bilgileriyle bir HttpHost ve HttpContext nesne oluşturmak ve yöntemin uygulanması için önce vermelisin şu şekildedir:

Benim kodudur.

Bu, kimlik doğrulamanızın arka uç kimliğinden bağımsız olduğu örnek koddur. Android'in http istemcisi uygun biçime dönüştürülecek. Bu örnek kodu kontrol edin, bu sadece referansınız içindir ve doğrudan kodunuzda kullanılmamalıdır. :)

Bu kod aktivitesinde ise:

@Override 
public void onResume(){ 
    super.onResume(); 
    AsyncTask<String, Void, Void> httpTask = new TestHttpThread(); 
    httpTask.execute("test_url","test_user","test_password"); 
} 

Numune AsyncActivity:

URL Bu URL'ye @scorpio
+0

Ben EXCEPTION alıyorum bunu kullandıktan sonra ana iş parçacığı veya ui dizisindeki bu isteği yapıyor olmalı – AB1209

+0

Yardım Lütfen bu durumda ne yapabilirsiniz? "Bu iplik HTTP isteklerini yasaklar". Bir zaman uyumsuz görev veya bunun kimlik doğrulaması olup olmadığını almanız mümkün değilim yeni code..of zaman uyumsuz görev – Naresh

+0

Güncelleme kod kod yürütmesine gerekir. Evet ise, sunucudan bilgi dönüşünü nasıl alabilirim ve Oturumu sürdürürüm. – Naresh

İlgili konular