невозможно получить местоположение заголовка ответа с помощью Java URLConnection - PullRequest
12 голосов
/ 24 сентября 2010

может кто-то любезно подсказать, что я делаю здесь не так?
Я пытаюсь получить местоположение заголовка для определенного URL с помощью Java, вот мой код:

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

это странноЯ точно знаю, что URL, к которому я обращаюсь, чтобы вернуть заголовок Location, и использование таких методов, как getContentType () или getContentLength (), прекрасно работает

Ответы [ 2 ]

15 голосов
/ 24 сентября 2010

Возможно, заголовок Location возвращается как часть ответа на перенаправление. Если это так, URLConnection автоматически обрабатывает перенаправление, отправляя второй запрос указанному ресурсу, поэтому его необходимо отключить:

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

EDIT: Если вам действительно нужен URL-адрес цели перенаправления и вы не хотите отключать обработку перенаправления, вы можете вместо этого вызвать getURL() (после установления соединения).

0 голосов
/ 02 марта 2016

Просто ответ до ответа axtavt ... Если URL имеет несколько перенаправлений, вы можете сделать что-то подобное для получения прямой ссылки:

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;
}
...