2010-11-22 7 views
3

Ich bin mir nicht sicher, wie man HTTP-Auth-Header sendet.Wie kann ich HTTP Basic Authentication-Header in Android senden?

Ich habe den folgenden HttpClient, um Anfragen zu bekommen, aber nicht sicher, wie ich Anfragen senden kann? Diese

public class RestClient extends AsyncTask<String, Void, JSONObject> { 
     private String convertStreamToString(InputStream is) { 
      /* 
      * To convert the InputStream to String we use the 
      * BufferedReader.readLine() method. We iterate until the 
      * BufferedReader return null which means there's no more data to 
      * read. Each line will appended to a StringBuilder and returned as 
      * String. 
      */ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
      StringBuilder sb = new StringBuilder(); 

      String line = null; 
      try { 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        is.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

      return sb.toString(); 
     } 

     /* 
     * This is a test function which will connects to a given rest service 
     * and prints it's response to Android Log with labels "Praeda". 
     */ 
     public JSONObject connect(String url) { 
      HttpClient httpclient = new DefaultHttpClient(); 

      // Prepare a request object 
      HttpGet httpget = new HttpGet(url); 

      // Execute the request 
      HttpResponse response; 
      try { 
       response = httpclient.execute(httpget); 
       // Examine the response status 
       Log.i("Praeda", response.getStatusLine().toString()); 

       // Get hold of the response entity 
       HttpEntity entity = response.getEntity(); 

       if (entity != null) { 

        // A Simple JSON Response Read 
        InputStream instream = entity.getContent(); 
        String result = convertStreamToString(instream); 

        // A Simple JSONObject Creation 
        JSONObject json = new JSONObject(result); 

        // Closing the input stream will trigger connection release 
        instream.close(); 

        return json; 
       } 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected JSONObject doInBackground(String... urls) { 
      return connect(urls[0]); 
     } 

     @Override 
     protected void onPostExecute(JSONObject json) { 

     } 
    } 

Antwort

0

Vielleicht kann die Dokumentation von Httpclient helfen: link

+2

FYI, Ihr Link ist für HttpClient 3.x, und Android hat HttpClient 4.x eingebaut. – CommonsWare

0

Da Android Httpclient kompiliert 4.0.x statt 3.x unter Snippet für Ihre Referenz.

if (authState.getAuthScheme() == null) { 
     AuthScope authScope = new Au HttpRequestInterceptor preemptiveAuth = 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);thScope(targetHost.getHostName(), targetHost.getPort()); 
     Credentials creds = credsProvider.getCredentials(authScope); 
     if (creds != null) { 
      authState.setAuthScheme(new BasicScheme()); 
      authState.setCredentials(creds); 
     } 
    } 
}  
}; 
DefaultHttpClient httpclient = new DefaultHttpClient(); 
httpclient.addRequestInterceptor(preemptiveAuth, 0);