¿Cuál es el método recomendado para obtener la respuesta HTTP como una Cadena cuando se utiliza Apache HTTP del Cliente?

He empezado a utilizar Apache HTTP del Cliente de la biblioteca y se dio cuenta que no había un método integrado de obtener la respuesta HTTP como una Cadena. Sólo estoy tratando de conseguir como Cadena, por lo que me puede pasar a cualquier biblioteca de análisis que estoy usando.

¿Cuál es la forma recomendada de obtener la respuesta HTTP como una Cadena? Aquí está mi código para hacer la solicitud:

public String doGet(String strUrl, List<NameValuePair> lstParams) {

    String strResponse = null;

    try {

        HttpGet htpGet = new HttpGet(strUrl);
        htpGet.setEntity(new UrlEncodedFormEntity(lstParams));

        DefaultHttpClient dhcClient = new DefaultHttpClient();

        PersistentCookieStore pscStore = new PersistentCookieStore(this);
        dhcClient.setCookieStore(pscStore);

        HttpResponse resResponse = dhcClient.execute(htpGet);
        //strResponse = getResponse(resResponse);

    } catch (ClientProtocolException e) {
        throw e;
    } catch (IOException e) {
        throw e;
    }

    return strResponse;

}

OriginalEl autor Mridang Agarwalla | 2012-08-23

4 Kommentare

  1. 45

    Puede utilizar EntityUtils#toString() para esto.

    //...
    HttpResponse response = client.execute(get);
    String responseAsString = EntityUtils.toString(response.getEntity());
    //...
    esta respuesta es el camino a seguir para HttpClient. Apache Jersey es, en mi opinión, mucho más fácil de trabajar que el HttpClient.
    No estoy seguro de a qué te refieres con «Apache Jersey». No hay tal cosa en el proyecto Apache. «Jersey» el Sun/Oracle, implementación de referencia de la API JAX-RS que no es un cliente HTTP.
    lo siento, me refería sun/oracle jersey. contiene un cliente http con una mayor fluidez de la API.

    OriginalEl autor BalusC

  2. 5

    Usted necesita consumir el cuerpo de la respuesta y obtener la respuesta:

    BufferedReader br = new BufferedReader(new InputStreamReader(httpresponse.getEntity().getContent()));

    Y, a continuación, lea:

    String readLine;
    String responseBody = "";
    while (((readLine = br.readLine()) != null)) {
      responseBody += "\n" + readLine;
    }

    La responseBody ahora contiene su respuesta como cadena.

    (No olvides cerrar las clases bufferedreader en la final: br.close())

    OriginalEl autor Pedro Nunes

  3. 1

    Puedes hacer algo como:

    Reader in = new BufferedReader(
            new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

    Utilizando el lector será capaz de construir su cadena. Pero si usted está utilizando el SAXO puede dar la corriente para el analizador directamente. De esta manera usted no tendrá que crear la cadena y su huella en la memoria será menor también.

    OriginalEl autor dan

  4. 0

    En términos de la concisión de código podría ser el uso de la Fluent API como este:

    import org.apache.http.client.fluent.Request;
    [...]
    String result = Request.Get(uri).execute().returnContent().asString();

    La documentación advierte a pesar de que este enfoque no es ideal en términos de consumo de memoria.

    OriginalEl autor anothernode

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea