2010-12-05 11 views
5

Estoy usando este código para enviar una solicitud a un servidor http:respuesta de lectura 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 respuesta no es nada más que un simple String. ¿Cómo puedo leer esta respuesta como String? No parece que HttpResponse tenga un método para hacerlo directamente.

Respuesta

10

He creado este método de ayuda para el envío de datos y cabeceras especiales por el método POST en Android (cabeceras HashMap podría estar vacía si no tiene ningún cabeceras personalizadas):

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

mi humilde opinión, es mejor para comprobar si el estado OK primero si (response.getStatusLine(). getStatusCode() == HttpStatus.SC_OK) {// algún código} else {// ..} un manejo –

+0

No te olvides de cubrir esto con el bloque try-catch;) – Taner

+0

th es una forma no efectiva si la cadena de la respuesta tiene un millón/billón de caracteres. Es muy lento. He probado –

5

response.getStatusLine(); // Para el estado de lectura línea de

org.apache.http.util.EntityUtils.toString(response.getEntity()); 
Cuestiones relacionadas