2009-11-23 2 views
2

Я пытаюсь загрузить JPG с использованием HttpURLConnection и встречаю очень своеобразную ошибку.нужна помощь с bizarre java.net.HttpURLConnection поведение

Вот URL: http://www.vh1.com/sitewide/promoimages/shows/m/my_antonio/video/supertrailer/seg_1/320x240.jpg

если открыть его в браузере вы увидите изображение.

Однако, когда я использую HttpURLConnection я не получаю изображение ... Что я получаю это 301, который, довольно странно, перенаправляет на http://wap.vh1.com

так

con.setInstanceFollowRedirects(true); 
//additional stream code here to go and get the stuff found in con 

переходит идти вперед и загрузите текст из wap.vh1.com, а не в jpg, который вы видите в браузере.

Я предполагаю, что это вызвало некоторую уловку заголовка, но я не имею ни малейшего представления о том, что ожидает ожидать хост, чтобы перенаправить меня туда же, где он перенаправляет браузер (и curl и wget и все остальное, на что я могу думать, указывая на это).

Я как раз готов стрелять в себя, поэтому, если вы поможете мне, вы будете мешать моей 6-летней дочери стать сиротой.

+0

Не могли бы вы высказать свой полный код, который вы используете для создания соединения и получения URL-адреса? –

+0

его много, и он работает для всех других URL-адресов, поэтому я не хочу помешать сообщению с ним ... Я добавлю несколько строк, которые наиболее уместны ... –

+0

Похоже на vh1 думаю, что ваш запрос поступает с мобильного устройства - это другие URL-адреса, которые работают для изображений? –

ответ

4

Сайт перенаправляет вас на основе пользовательского агента. Добавьте это перед тем, как открыть соединение,

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.15) Gecko/2009101600 Firefox/3.0.15"); 
+0

Вы рок ... большое спасибо. –

+1

Я бы просто добавил, что каждый «действительный» настольный клиент, такой как useragent, разрешен здесь, а не явно Firefox на MacOS :) – BalusC

0

В то время как я не могу помочь вам с вашей конкретной проблемой, вот что я хотел бы сделать:

  • Скачать wireshark, нюхать запрос HTTP, отправленный ваши приложение Java

  • Копировать/Вставить запрос, и запустить его с телнет (или инструмента, такого как WFetch)

  • Запутайтесь с заголовками запроса и посмотрите, изменилось ли поведение.

(я подозреваю, что сайт экранирует запрос, основанный на заголовок агента пользователя или что-то подобное)

+0

Другим инструментом, который может помочь в подобной ситуации, является плагин FireBug для Firefox. –

0

Для большей гибкости вы можете использовать http commons libraries, которые имеют большую поддержку отладки для проволоки через log4j ...

Кроме того, пользовательские агенты и другие параметры запроса могут быть легко установлены.

Для получения дополнительной информации см. their tutorial.

0

Пакет java.net не поддерживает множество необходимых функций из коробки (например, автоматически сохраняет и отправляет файлы cookie). Используйте Apache's httpClient вместо

1

Похоже, сервер интерпретирует ваш запрос как исходящий с мобильного устройства, возможно, на основе заголовка User-Agent. Вот почему вы перенаправлены на мобильный сайт. Попробуйте явно установить User-Agent.

Смежные вопросы