¿Por qué no puedo leer el cuerpo de la solicitud POST en Java?

Código

public HttpRequest(BufferedReader from) {
String firstLine = "";

try {
    firstLine = from.readLine();
} catch (IOException e) {
    System.out.println("Error reading request line: " + e);
}

String[] tmp = firstLine.split(" ");
method = tmp[0];
URI = tmp[1];
version = tmp[2];
System.out.println("URI is: " + URI);

if(method.equals("POST")){
    try {
        String line = from.readLine();
        while (line.length() != 0) {
            headers += line + CRLF;
            if (line.startsWith("Host:")) {
                tmp = line.split(" ");
                if (tmp[1].indexOf(':') > 0) {
                    String[] tmp2 = tmp[1].split(":");
                    host = tmp2[0];
                    port = Integer.parseInt(tmp2[1]);
                } else {
                    host = tmp[1];
                    port = HTTP_PORT;
                }
            }
            line = from.readLine();
        }
        headers += "Connection: close" + CRLF;
        headers += CRLF;
    } 
    catch (IOException e) {
        System.out.println("Error reading from socket: " + e);
        return;
    }       
}
else {
    System.out.println("Error: Method not supported");
    return;
}

System.out.println("Host to contact is: " + host + " at port " + port); 
    }

Problema

Estoy haciendo un servidor proxy usando Java.

El código anterior maneja una solicitud HTTP POST. Lee con éxito el encabezado POST y lo imprime en el símbolo del sistema, pero falta el cuerpo.

¿Puedes mirar mi código y ver el problema? Gracias.

(NOTA: excluí la parte GET porque no hubo problemas con eso).

Resultado

Resultado

Resultado

Respuesta 1

El problema es que todavía tiene cosas que leer en InputStream. Es por eso que cuando cierra el navegador, no hay nada más que leer, por lo que está impreso. Debe leer exactamente el número de bytes que se declara en "Content-Length"

Intenta algo como esto:

int cL = Integer.valueOf(contentLength);
byte[]  buffer      = new byte[cL];
String  postData    = "";

System.out.println("Reading "+ cL + "bytes");
in.read(buffer, 0, cL);
postData = new String(buffer, 0, buffer.length);
System.out.println(postData);

La solicitud del cuerpo estará en la cadena postData.

Respuesta: 2

Estimados desarrolladores de StackOverFlow Quiero una ayuda de ustedes. Estoy atascado en Apache Lucene para usar en la aplicación Java Swing. El problema es tan complejo que incluso estoy confundido, ¿cómo debo preguntarlo? Por favor, inténtalo ...

He estado recibiendo este error de tiempo de ejecución de Java: excepción en el hilo "principal" java.lang.UnsatisfiedLinkError: no jogl en java.library.path Esto tiene que ver con tener dificultades para cargar el nativo dependiente ...

Este fue mi desafío de codificación de Hackerrank para una entrevista para un nuevo puesto de ingeniero de software graduado: rompecabezas de antes y después Dada una lista de frases, generar una lista de Wheel of Fortune "Antes y ...

En Europa Central, la zona horaria actual (a partir del 3 de octubre) es: CEST / UTC + 2 Pero cuando creo una instancia de SimpleDateFormat en Android ahora ... dateTimeFormat = new SimpleDateFormat ("aaaa-MM-dd '...