2010-11-22 7 views
3

Je ne sais pas comment envoyer des en-têtes HTTP Auth.Comment envoyer des en-têtes HTTP Basic Authentication sous Android?

J'ai le HttpClient suivant pour obtenir des demandes, mais je ne sais pas comment je peux envoyer des demandes?

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) { 

     } 
    } 

Répondre

6

Ceci est couvert dans le HttpClient documentation et dans leur sample code.

+10

Certaines méthodes de la documentation n'existent pas sur la plate-forme android. –

0

Peut-être que la documentation de HttpClient peut aider: link

+2

FYI, votre lien est pour HttpClient 3.x, et Android a HttpClient 4.x intégré. – CommonsWare

0

Depuis Android compile HttpClient 4.0.x au lieu de 3.x, ci-dessous est extrait pour votre référence.

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); 
Questions connexes