2010-08-06 19 views
20

Deseo realizar algunas llamadas de la API a un servidor usando HttpURLConnection. Sin embargo, las solicitudes no tienen éxito, volviendo:Java: muestra la solicitud de una HttpURLConnection antes de enviar

<error> 
    <http_status>400 Bad Request</http_status> 
    <message>Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.</message> 
</error> 

por lo que quiero para comprobar cuál es el contenido "real" es que se envía al servidor. Por contenido real me refiero a la solicitud HTTP exacta.

¿Alguna idea de cómo puedo ver esto?

Editar: Sobre la base de las primeras respuestas aquí debo aclarar mi problema: Quiero evitar el uso de un programa externo como sniffer HTTP o nada y tenía la esperanza de que existe una función o una propiedad o lo que mantiene la información que estoy buscando

Si ese no es el caso, ¿Alguien sabe si esta información se puede reconstruir de forma manual (por ejemplo, llamando a varias funciones como getRequestMethod(), etc.)

estoy frente a este problema un poco a menudo, así que es vale la pena el esfuerzo para construir esa funcionalidad yo mismo. Solo necesita saber cómo :)

+0

duplicado Posible de [¿Cómo habilitar el registro de hilos para un tráfico java HttpURLConnection?] (http://stackoverflow.com/questions/1445919/how-to-enable-wire-logging-for-a-java-httpurlconnection-traffic) – Vadzim

Respuesta

14

Usted puede poner el HttpURLConnection en modo de depuración, permitiendo java.logging con

-Djava.util.logging.config.file=logging.properties 

y poner en logging.properties (por defecto en JRE_HOME \ lib) la siguiente propiedad

sun.net.www.protocol.http.HttpURLConnection.level = ALL 
+0

Yo no realmente sé lo que tengo que hacer con la línea de código que mencionaste arriba ... ¿dónde necesito pu esto? (usando eclipse como IDE) – Hirnhamster

+2

También necesita establecer "java.util.logging.ConsoleHandler.level = FINEST" – Gili

+1

@Hirnhamster, en la pestaña Ejecutar configuración - Argumentos, que agrega a la sección de argumentos de VM. – RealHowTo

0

Use algo como tcpdump, que puede volcar los paquetes de red reales que su computadora emite o recibe.

4

tcpdump funcionará, pero puede ser difícil hacerlo hacer lo que quiera. NetCat es más fácil de usar (esta es la página del proyecto: http://netcat.sourceforge.net/ - la mayoría de las plataformas Unix ya lo incluyen).

nc -l 9999 

Esto va a escuchar en el puerto TCP 9999, y cuando se conecta un cliente HTTP, que va a imprimir el texto completo de la solicitud.

Cuestiones relacionadas