2010-09-24 12 views
12

¿alguien puede sugerir amablemente lo que estoy haciendo mal aquí?
estoy tratando de obtener la ubicación de cabecera para una determinada URL usando Java aquí está mi código:no se puede obtener la ubicación del encabezado de respuesta usando URLConnection de Java

URLConnection conn = url.openConnection(); 
String location = conn.getHeaderField("Location"); 

que es extraño ya que sé a ciencia cierta la URL estoy refiriendo a devolver una cabecera Location y el uso métodos como getContentType() o getContentLength() funciona perfectamente

su consejo es muy apreciada como siempre :)

Gracias

+0

Y 1 para la pregunta. –

Respuesta

14

QuizásEl encabezadose devuelve como parte de la respuesta de redireccionamiento. Si es así, URLConnection asas redirigir automáticamente mediante la emisión de la segunda petición al recurso en punta, por lo que necesita para desactivarlo:

((HttpURLConnection) conn).setInstanceFollowRedirects(false); 

EDIT: Si realmente necesita una URL de redirección del objetivo y no lo hace desea deshabilitar el manejo de redirección, puede llamar al getURL() en su lugar (una vez establecida la conexión).

+1

como un encanto :) –

+0

¡Estupendo! Una valiosa adición a mi pequeña base de conocimiento. +1 –

+0

re su edición: ¡eso es aún más elegante! gracias –

0

Sólo un seguimiento a axtavt's respuesta ... Si la URL tiene múltiples redirecciones, se podría hacer algo como esto con el fin de obtener el enlace directo:

String location = "http://www.example.com/download.php?getFile=1"; 
HttpURLConnection connection = null; 
for (;;) { 
    URL url = new URL(location); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setInstanceFollowRedirects(false); 
    String redirectLocation = connection.getHeaderField("Location"); 
    if (redirectLocation == null) break; 
    location = redirectLocation; 
} 
Cuestiones relacionadas