Establecer la respuesta de la codificación con HttpClient 3.1

Estoy usando org.apache.commons.httpclient.HttpClient y la necesidad de la instalación de la respuesta de codificación (por alguna razón el servidor devuelve errores de codificación en el Tipo de Contenido). Mi camino es el de obtener una respuesta como bytes sin procesar y convertir a String con codificación deseada. Me pregunto si hay alguna manera mejor de hacerlo (por ejemplo. el programa de instalación de HttpClient). Gracias por las sugerencias.

4 Kommentare

  1. 3

    Yo no creo que haya una mejor respuesta usando HttpClient 3.x Api.

    El HTTP 1.1 especificaciones dice claramente que un cliente «debe» respetar el conjunto de caracteres especificado en el encabezado de respuesta, y el uso de ISO-8859-1 si no es el conjunto de caracteres especificado. El HttpClient Api se ha diseñado en el supuesto de que el programador quiere conformar HTTP especificaciones. Obviamente, usted necesita para romper las reglas en la especificación de modo que usted puede hablar con el no-obediente servidor. No obstante, este no es un caso de uso que la API de diseñadores vio la necesidad de apoyar de forma explícita.

    Si se utiliza la HttpClient 4.x, podría escribir su propio ResponseHandler para convertir el cuerpo en un HttpEntity, ignorando el mensaje de respuesta del nocional conjunto de caracteres.

  2. 2

    Un par de notas:

    1. Servidor sirve de datos, por lo que toca a un servidor para servir en un formato apropiado. Así que la respuesta de codificación se establece por el servidor, no del cliente. Sin embargo, el cliente podría sugerir al servidor qué formato desea a través de Aceptar y Accept-Charset:

      Accept: text/plain
      Accept-Charset: utf-8

      Sin embargo, servidores http generalmente no convertir entre formatos.

    2. Si la opción 1. no funciona, entonces usted debe mirar en la configuración del servidor.

    3. Cuando la Cadena se envía como raw bytes (y siempre lo es, porque esto es lo que las redes de transmisión), siempre existe la codificación definida. Desde el servidor, se produce este raw bytes, se define la codificación. Así, usted no puede tomar cruda bytes y el uso de la codificación de su elección para crear una Cadena. Usted debe utilizar la codificación que se utilizó cuando se convierte de Cadena de caracteres a bytes.

    • Hola, no tengo servidor bajo mi control y no devuelve mal codificación de Contenido de Tipo de atributo (HttpClient.getResponseBodyAsString() toma de codificación de Contenido de Tipo de atributo en los encabezados de respuesta). He probado el programa de instalación de Aceptar y Accept-Charset como usted menciona en los encabezados de la solicitud pero no me ayuda. Obiviously es algo malo en el servidor pero no soy propietario por lo que no puedo hacer cambios en ella.
    • Entonces estás de suerte..
    • +1 para el gran comentario 😀
    • Thx ;). De todos modos, ¿por qué estás molesta por la codificación de caracteres? En java se puede tomar cruda bytes con cualquier codificación y producir una Cadena de él.
    • Simplemente no me gusta la forma de romper reglas de API, así que quiero saber que posibilidades.
  3. 0

    Descargo de responsabilidad: yo no soy realmente saber HttpClient, sólo la lectura de la API.

    Me gustaría utilizar el método execute devuelve un HttpResponse, entonces .getEntity().getContent(). Esto es un puro flujo de bytes, por lo que si desea omitir la codificación dicho por el servidor, usted puede simplemente ajustar su propia InputStreamReader a su alrededor.


    Bueno, parece que me había equivocado de versión (obviamente, hay demasiado HttpClient clases por ahí).

    Pero lo mismo que antes, sólo encuentra en otras clases: la HttpMethod tiene un getResponseBodyAsStream() método, alrededor de la cual usted puede ahora ajustar su propia InputStreamReader. (O obtener toda la matriz a la vez, si no es demasiado grande, y convertirlo a String, como usted escribió.)

    Creo tratando de cambiar la respuesta y dejar que el HttpClient analizar no es la manera correcta de aquí.


    Sugiero enviar un mensaje al administrador del servidor/webmaster sobre el mal juego de caracteres, aunque.

  4. 0

    Saludos gente,

    Jus en caso de que alguien encuentre este post buscando en google para la configuración de HttpClient para escribir en UTF-8.

    Esta línea de código debe ser útil…

    response.setContentType("text/html; charset=UTF-8");

    Mejor

    • Hola, gracias por comentar. Podría usted por favor enviar completa de la fuente donde está claro a qué objeto response es.
    • Saludos, Gracias! Creo que debería ser suficiente para decir HttpServletResponse response
    • Hola, estoy usando el Apache HttpClient para descargar los datos. No estoy trabajando con Servlet así que no hay HttpServletResponse.

Kommentieren Sie den Artikel

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

Pruebas en línea