2010-12-05 3 views
5

J'utilise ce code pour poster une requête à un serveur http:lecture réponse HttpPost

HttpClient client = new DefaultHttpClient(); 
HttpPost post = new HttpPost("http://192.168.0.1/test.php"); 
HttpResponse response = null; 
try { 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("num", "2")); 
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    response = client.execute(post); 
} 
catch(ClientProtocolException e) { 
    ... 
} 
catch(IOException e) { 
    ... 
} 

La réponse est rien de plus qu'un String simple. Comment puis-je lire cette réponse en tant que String? Il ne semble pas que HttpResponse ait une méthode pour le faire directement.

Répondre

10

J'ai créé cette méthode d'aide pour envoyer des données et des en-têtes spéciales par la méthode POST dans Android (en-têtes HashMap pourrait être vide si vous n'avez pas en-têtes personnalisés):

public static String getStringContent(String uri, String postData, 
     HashMap<String, String> headers) throws Exception { 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost request = new HttpPost(); 
     request.setURI(new URI(uri)); 
     request.setEntity(new StringEntity(postData)); 
     for(Entry<String, String> s : headers.entrySet()) 
     { 
      request.setHeader(s.getKey(), s.getValue()); 
     } 
     HttpResponse response = client.execute(request); 

     InputStream ips = response.getEntity().getContent(); 
     BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"UTF-8")); 
     if(response.getStatusLine().getStatusCode()!=HttpStatus.SC_OK) 
     { 
      throw new Exception(response.getStatusLine().getReasonPhrase()); 
     } 
     StringBuilder sb = new StringBuilder(); 
     String s; 
     while(true) 
     { 
      s = buf.readLine(); 
      if(s==null || s.length()==0) 
       break; 
      sb.append(s); 

     } 
     buf.close(); 
     ips.close(); 
     return sb.toString(); 

} 
+1

à mon humble avis, il est préférable de vérifier si l'état correct d'abord si (response.getStatusLine(). getStatusCode() == HttpStatus.SC_OK) {// du code} else {// ..} une manipulation –

+0

Ne pas oublier de couvrir ceci avec le bloc try-catch;) – Taner

+0

est de manière pas efficace si la chaîne de la réponse a un million/milliard de caractères. C'est trop lent. J'ai testé –

5

response.getStatusLine(); // Pour connaître l'état lecture ligne

org.apache.http.util.EntityUtils.toString(response.getEntity()); 
Questions connexes