Подтвердить что ты не робот

Java.io.IOException: сервер вернул код ответа HTTP: 403 для URL

Мой код выглядит следующим образом:

URL url;
URLConnection uc;
StringBuilder parsedContentFromUrl = new StringBuilder();
String urlString="http://www.example.com/content/w2e4dhy3kxya1v0d/";
System.out.println("Getting content for URl : " + urlString);
url = new URL(urlString);
uc = url.openConnection();
uc.connect();
uc.getInputStream();
BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
int ch;
while ((ch = in.read()) != -1) {
    parsedContentFromUrl.append((char) ch);
}
System.out.println(parsedContentFromUrl);

Однако, когда я пытаюсь получить доступ к URL-адресу через браузер, нет никаких проблем, но когда я пытаюсь получить к нему доступ через java-программу, он выдает expection:

java.io.IOException: Server returned HTTP response code: 403 for URL

Какое решение?

4b9b3361

Ответ 1

Добавьте код ниже между uc.connect(); и uc.getInputStream();:

uc = url.openConnection();
uc.addRequestProperty("User-Agent", 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");

Однако неплохо было бы просто разрешить определенные типы пользовательских агентов. Это обеспечит безопасность вашего сайта и низкий уровень использования полосы пропускания.

Некоторые возможные "пользовательские агенты", которые вы можете заблокировать с вашего сервера, в зависимости от того, хотите ли вы, чтобы люди лизировали ваш контент и пропускную способность. Но пользовательский агент может быть подделан, как вы можете видеть в моем примере выше.

Ответ 2

403 означает запрет. Из здесь: -

10.4.4 403 Запрещено

Сервер понял запрос, но отказывается выполнять его. Авторизация не поможет, и запрос НЕ ДОЛЖЕН повториться. Если метод запроса не был HEAD, а сервер хочет обнародовать, почему запрос не выполнен, он СЛЕДУЕТ описать причину отказ в юридическом лице. Если сервер не желает делать эту информацию доступный клиенту, статус код 404 (не найден) вместо этого.

Вам нужно связаться с владельцем сайта, чтобы убедиться, что разрешения установлены правильно.

EDIT Я вижу вашу проблему. Я запустил URL через Fiddler. Я заметил, что я получаю 407, что означает ниже. Это должно помочь вам в правильном направлении.

10.4.8 407 Требуется аутентификация прокси-сервера

Этот код похож на 401 (Неавторизованный), но указывает, что клиент должен сначала аутентифицироваться с прокси. Прокси ДОЛЖЕН вернуться поле заголовка Proxy-Authenticate (раздел 14.33), содержащий вызов применительно к доверенности для запрошенный ресурс. Клиент МОЖЕТ повторите запрос с помощью подходящего Поле заголовка прокси-авторизации (раздел 14.34). Доступ HTTP аутентификация объясняется в разделе "HTTP Аутентификация: базовый и дайджест Аутентификация доступа"

Также см. соответствующий вопрос.

Ответ 3

ЕСЛИ браузер может получить доступ к странице, а ваш код не может, то есть что-то другое между запросом браузера и вашим запросом. Вы можете посмотреть запрос браузера, используя, скажем, Firebug, чтобы узнать, каковы различия. Некоторые вещи, о которых я могу думать, следующие:

  • Сайт устанавливает cookie (возможно, во время входа в систему). Вы можете справиться это в коде, вам придется явно добавить поддержку для прохождения печенье. Это наиболее вероятно.

  • Фильтры сайта, основанные на пользовательских агентах. Вы можете установить агент пользователя. Это не так.