HttpClient: la desactivación de la codificación fragmentada

Estoy usando el Apache Commons HttpClient junto con Restlet para llamar a un servicio web restful. Por desgracia, mi servidor (basado en Ruby on Rails) no le gusta la Transfer-Encoding: chunked que HttpClient está utilizando de forma predeterminada.

Hay alguna forma de deshabilitar el uso de codificación fragmentada por los Puestos desde el cliente?

3 Kommentare

  1. 2

    Como se dijo en Restlet lista de correo, en Restlet la versión 2.1, se puede establecer ClientResource#entityBuffering propiedad a true para el contenido en caché en la memoria y evitar la codificación fragmentada.

  2. 5

    Como regla general, para la petición de no ser fragmentada, es necesario especificar el tamaño exacto del cuerpo del post, que de forma dinámica los datos generados significa que usted necesita para búfer de respuesta de todo en la memoria, consulte a su tamaño, y sólo luego de enviarlo.

    Apache documentación del cliente parece confirmar esta: AbstractHttpEntity.setChunked() estados

    Tenga en cuenta que la configuración fragmentada es una sugerencia solamente. Si el uso de HTTP/1.0, chunking nunca se realiza. De lo contrario, incluso si fragmentada es falso, HttpClient debe utilizar pedazo de codificación si la entidad de longitud de contenido es desconocido (-1).

  3. 2

    La manera más confiable, como @Slartibartfast, mencionó en su respuesta, es explícitamente interruptor HttpPost a protocolo HTTP 1.0.

    1. Conjunto de apache HttpPost solicitud de protocolo HTTP 1.0 (el mismo para HttpGet, si usted necesita esto…):

      HttpPost httpPost = new HttpPost(someUrl);
      httpPost.setProtocolVersion(HttpVersion.HTTP_1_0); //Ya que el v. 4.3 de Apache HttpClient

    2. Cuando la creación de Varias partes petición post se proporcionan como una entrada para un archivo adjunto no un InputStream (como de HTTP 1.1, que hace que la codificación fragmentada), sino un array de bytes, lo que usted tiene que crear de la misma corriente de antemano. Esta es la razón por la longitud del contenido es conocido. Ver org.apache.http.entidad.mime.MultipartEntityBuilder.addBinaryBody(String, byte[], ContentType, Cadena)

    He probado para el desarrollo de Android, que requiere ligeramente diferentes nombres de clase… (ver https://github.com/andstatus/andstatus/issues/249 )

Kommentieren Sie den Artikel

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

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...