странная проблема с java.net.URL и java.net.URLConnection - PullRequest
0 голосов
/ 10 апреля 2009

Я пытаюсь загрузить изображение с URL. Процесс, который я написал, работает для всех, за исключением ОДНОГО поставщика контента, с которым мы имеем дело.

Когда я получаю доступ к их JPG через Firefox, все выглядит кошерно (счастливой Пасхи, кстати). Однако, когда я использую свой процесс, я либо:

А) получить 404 или

B) в отладчике, когда я устанавливаю точку останова в строке URL (URL url = новый URL (str);) затем после подключения я действительно получаю файл, но это не .jpg, а скорее какой-то HTML, который они создают с помощью обычных ссылок и прочего. Я не вижу код перенаправления, хотя! Возвращается как 200.

Вот мой код ...

URL url = new URL(urlString);               
URLConnection uc = url.openConnection();        
String val = uc.getHeaderField(0);
System.out.println("FOUND OBJECT OF TYPE:" + contType);
if(!val.contains("200")){                         
  //problem
}
else{
    is = uc.getInputStream();
}

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

Ответы [ 4 ]

4 голосов
/ 10 апреля 2009

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

Обычно они проверяют HTTP-реферер (он должен быть из их собственного домена) или пользовательский агент (должен быть браузером, а не менеджером загрузки). Установите оба и попробуйте снова.

3 голосов
/ 10 апреля 2009
if(!val.contains("200")) // ...

Прежде всего, я бы предложил вам использовать этот полезный класс под названием HttpURLConnection , который предоставляет метод getResponseCode ()

Поиск целых данных по некоторым '200' подразумевает

  1. проблем с производительностью и
  2. несоответствие (двоичные файлы могут содержать некоторые '200')
3 голосов
/ 10 апреля 2009

Вы пытались использовать WireShark , чтобы точно узнать, какие пакеты собираются туда и обратно? Часто это самый быстрый способ увидеть, что отличается. То есть:

  1. Сначала запустите WireShark при использовании FireFox для получения GIF, а затем
  2. Запустите WireShark, чтобы использовать код для его получения.

Затем сравните и сопоставьте пакеты в обоих направлениях, и я почти гарантирую, что вы увидите что-то другое в заголовках HTTP или какой-то другой части трафика, которая объяснит проблему.

0 голосов
/ 10 апреля 2009

Все хорошие догадки, но награда за «правильный» ответ, я думаю, должна идти к ivan_pertrovich_ivanovich_harkovich_rostropovitch_o'neil, потому что с помощью HttpURLConnection я смог увидеть, что на самом деле, прежде чем получить 404, я сначала получаю 301 Так что теперь, это просто вопрос от этих людей, что они ожидают в заголовке, что сделало бы их менее склонными перенаправлять меня.

спасибо за предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...