2010-09-24 7 views
12

Czy ktoś może sugerować, co robię źle?
Próbuję dostać lokalizację nagłówka przez pewien URL, używając Java tutaj jest mój kod:nie można uzyskać lokalizacji nagłówka odpowiedzi za pomocą adresu URL ConnectionConnection

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

to dziwne, ponieważ wiem, że na pewno URL Jestem odnosząc się do powrotu nagłówka Location i korzystania podobne metody getContentType() lub getContentLength() działa doskonale

twoja rada jest bardzo cenione jak zawsze :)

Dzięki

+0

do +1 na pytanie. –

Odpowiedz

14

MożeNagłówekjest zwracany jako część odpowiedzi przekierowania. Jeśli tak, URLConnection uchwyty przekierowywać automatycznie wydając drugi wniosek do zasobu spiczastym, więc trzeba ją wyłączyć:

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

EDIT: Jeśli rzeczywiście potrzebujemy URL celu przekierowania i nie zrobić chcesz wyłączyć przekierowanie, możesz zamiast tego zadzwonić pod numer getURL() (po ustanowieniu połączenia).

+1

jak urok :) –

+0

Świetnie! Cenny dodatek do mojej małej bazy wiedzy. +1 –

+0

ponownie edytuj: to jest jeszcze bardziej eleganckie! dzięki –

0

Wystarczy śledzić odpowiedzi do axtavt's ... Jeśli adres URL ma wiele przekierowań, można zrobić coś takiego, aby uzyskać bezpośredni link:

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; 
} 
Powiązane problemy