Java Http (s) URLConnection java.io.IOException: сервер вернул код ответа HTTP: 403 - PullRequest
0 голосов
/ 09 мая 2018

java.io.IOException: сервер вернул код ответа HTTP: 403 для http://www.budgetbottle.com/vivino.xml

Этот URL работает (возвращает содержимое) при запуске основным методом класса Java a на локальном сервере tomcat, но выдает ошибку при запуске на сервере tomcat на рабочей машине.

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

URL url = new URL("http://www.budgetbottle.com/vivino.xml");    
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
urlcon.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
// System.setProperty("http.agent", "");
System.setProperty("http.agent", "Chrome");

// urlcons.setRequestProperty("Content-Language", "en-US");
// urlcons.setUseCaches(false);
// urlcons.setDoInput(true);
// urlcons.setDoOutput(true);

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

Обновление:
Я только что заметил, что утилита wget также выдает ту же ошибку в производственной системе, хотя в локальной системе проблем нет. Обратите внимание, что такие опции, как User-Agent используются

Это системная ошибка?

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Вполне возможно, что рабочий сервер работает за сервером Apache HTTPD, который передает запросы на сервер Tomcat. Этот тип установки предпочтителен в некоторых развертываниях по следующим причинам:

  • Это позволяет копировать статически обслуживаемые элементы приложения в сторону обработки Apache HTTPD, где Apache HTTPD обычно намного быстрее, чем Tomcat, обслуживает статические файлы с диска.
  • Позволяет пересылать только «действительные» запросы, снижая нагрузку на Tomcat.
  • Это позволяет не пересылать запросы, которые могут изменить конфигурацию развертываний или конфигурацию приложений в Tomcat, даже если кто-то случайно развернет инструменты веб-управления Tomcat
  • Это позволяет использовать инструмент веб-управления при условии, что запросы поступают от доверенного набора интернет-адресов.

И есть много дополнительных элементов, которые могут представлять интерес для системного администратора, побуждая их развернуть Tomcat за Apache HTTPD.

По крайней мере в одном сценарии это может также позволить Apache HTTPD выполнить проверку подлинности запроса и ответа на уровне HTTPD перед пересылкой запроса в Tomcat.

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

0 голосов
/ 10 мая 2018

Может ли быть так, что ваш рабочий сервер каким-то образом ограничил сетевое подключение (все попытки подключения http / https перенаправлены на невыполненный прокси-сервер, возвращающий «доступ запрещен»)?

Можете ли вы получить доступ к любому другому внешнему сайту из производственной среды?

0 голосов
/ 09 мая 2018

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

    URL url = new URL("http://www.budgetbottle.com/vivino.xml");
    HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
    urlcon.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
    System.setProperty("http.agent", "Chrome");
    BufferedReader reader = new BufferedReader(new InputStreamReader(urlcon.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null)
    {
        sb.append(line + "\n");
    }
    System.out.println(sb.toString());
...