2011-07-15 11 views
14

जहां मैं एक server.Initially सर्वर के माध्यम से उपयोगकर्ता नाम/पासवर्ड के सत्यापन हूँ Basic प्रमाणीकरण को लागू किया गया था तो मेरे कोड ठीक काम कर रहा था, लेकिन इतना मेरे पुराने कोड काम नहीं कर रहा अब सर्वर Digest प्रमाणीकरण करने के लिए बदल गया है मैं एक Android ऐप्लिकेशन बनाने रहा हूँ।एंड्रॉइड में डाइजेस्ट प्रमाणीकरण का उपयोग कैसे करें?

Digest प्रमाणीकरण का उपयोग करने के लिए क्या परिवर्तन कर सकता हूँ चाहिए?

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

अपने URL काम नहीं कर रहे –

+0

यह URL @scorpio सच नहीं है। – AB1209

उत्तर

15

आप आवश्यक पहचान के साथ एक HttpHost और HttpContext वस्तु बना सकते हैं और विधि निष्पादित करने के लिए इसे देने के लिए की जरूरत है:

मेरे कोड इस प्रकार है।

यह एक नमूना कोड जहां अपने प्रमाणीकरण बैकएंड प्रमाणन से स्वतंत्र होता है। एंड्रॉइड के http क्लाइंट इसे उचित प्रारूप में परिवर्तित करने का ख्याल रखेंगे। इस नमूना कोड को जांचें, यह केवल आपके संदर्भ के लिए है और सीधे आपके कोड में उपयोग नहीं किया जाना चाहिए। :)

इस कोड को अपनी गतिविधि में है:

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

नमूना AsyncActivity:

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; 
    } 
} 
+0

इसका उपयोग करने के बाद मुझे EXCEPTION मिल रहा है "यह धागा HTTP अनुरोधों को रोकता है" मैं इस स्थिति में क्या कर सकता हूं कृपया – AB1209

+0

सहायता करें, आपको मुख्य अनुरोध या ui थ्रेड में यह अनुरोध करना होगा। यदि आप एक async कार्य में या नए code..of async कार्य – Naresh

+0

अपडेट किया गया कोड मैं इसे या के सत्यापन नहीं है कि प्राप्त करने में सक्षम नहीं कर रहा हूँ में कोड निष्पादित करना चाहिए। यदि हां, तो मैं सर्वर से जानकारी वापस कैसे प्राप्त कर सकता हूं और सत्र को बनाए रख सकता हूं। – Naresh

संबंधित मुद्दे