es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo enviar una solicitud PUT sin contenido y sin encabezado Content-Length usando Apache http client?

Me gustaría probar (mediante una prueba automatizada) cómo responde el servidor (y todos los proxies intermedios) a una solicitud PUT sin cuerpo y encabezado Content-Length.

Similar a lo que hace curl

curl -XPUT http://example.com

con Apache HTTP client (4.5.13)

Pero parece que siempre agrega el encabezado Content-Length si no especifico un cuerpo. ¿Existe alguna manera de hacerlo con Apache HTTP client?

Ya intenté (sin suerte)

final HttpPut request = new HttpPut(url);
request.removeHeaders("Content-Length");

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para probar cómo responde un servidor (y todos los proxies intermedios) a una solicitud PUT sin cuerpo y sin encabezado Content-Length utilizando el cliente Apache HTTP (4.5.13), puede probar el siguiente código:

    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicHeader;
    
    import java.io.IOException;
    
    public class TestServerResponse {
        public static void main(String[] args) throws IOException {
            String url = "http://example.com";
            HttpPut request = new HttpPut(url);
            // Establecer un cuerpo vacío
            request.setEntity(null);
            // Establecer un encabezado para indicar la ausencia de contenido
            request.setHeader(new BasicHeader("Content-Length", "0"));
            CloseableHttpClient client = HttpClients.createDefault();
            client.execute(request);
            // La respuesta del servidor contendrá información sobre cómo respondió a la solicitud.
        }
    }
    

    Este código establece un cuerpo vacío y un encabezado Content-Length con un valor de 0 en la solicitud PUT. Esto debería enviar una solicitud PUT a la URL especificada sin especificar un cuerpo ni una longitud de contenido.

    El método request.removeHeaders("Content-Length"); en el código que has probado anteriormente puede que no funcione porque el cliente Apache HTTP establece automáticamente el encabezado Content-Length según la longitud de la entidad de solicitud proporcionada. Establecer la entidad como null y agregar un encabezado con una longitud de 0 debería evitar que el cliente agregue automáticamente un encabezado Content-Length.

Comments are closed.