2010-01-20 24 views
7

¿Cómo se hace un HTTP PUT? La clase que estoy usando parece pensar que está haciendo un PUT, pero el punto final lo está tratando como si hiciera un GET. ¿Estoy haciendo algo mal?Java: HTTP PUT con HttpURLConnection

URL url = new URL("https://..."); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("PUT"); 

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); 

writer.write(xmlString); 
writer.close(); 

System.out.println(conn.getRequestMethod()); 
String response = readInputStream(conn.getInputStream()); 
System.out.println(response); 

¿Qué es la impresión:

PUT 
<same content as doing a GET> 

prefiero no incluir otra biblioteca si éste podría funcionar ...

Respuesta

5

Hay una manera fácil de averiguar: correr y ver Wireshark lo que es realmente pasando en la red. Descubrí que esta es la forma más confiable de diagnosticar este tipo de problema: su cliente podría tener errores, la biblioteca podría tener errores, el servidor podría tener errores, pero Wireshark le mostrará lo que realmente está sucediendo.

EDITAR: Bueno, para HTTPS es un poco más complicado. Puede usar Fiddler si está ejecutando en Windows, que es un proxy: puede hacer frente a HTTPS si puede convencer a su código de cliente para que acepte su certificado, pero eso es un poco más intrusivo ... poner un proxy en el camino claramente cambia el aspecto del tráfico

Sería mejor si pudiera hablar con una versión de depuración del servidor a través de HTTP en su lugar. ¿Es eso factible en su caso, o el servidor está completamente fuera de su control?

+0

Todo mi tráfico es https al servidor remoto ... y wireshark no puede ver mucho dentro de allí. Golpearlo con curl vs de java se ve diferente, pero ¿qué debería estar buscando? –

+0

Buena idea. Los contacté y obtuve un servidor HTTP para probar. Descubrí que mi problema era la falta de un encabezado Content-Type rechazado por su servidor. Muchas gracias. –