Получение " java.сеть.ProtocolException: сервер перенаправлен слишком много раз " ошибка

Я делаю простой запрос URL с таким кодом:

URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();

но в этой последней строке я получаю "перенаправленную слишком много раз ошибку". Если моя "веб-страница" var, скажем, google.com тогда он работает нормально, но когда я пытаюсь использовать URL-адрес моего сервлета, он терпит неудачу. Кажется, я могу настроить количество раз, когда он следует за перенаправлениями (по умолчанию 20) с этим:

System.setProperty("http.maxRedirects", "100");

но когда я провожу его до, скажем, 100, это определенно занимает больше времени, чтобы бросить ошибку, поэтому я знаю это стремящийся. Однако URL-адрес моего сервлета отлично работает в (любом) браузере и с помощью опции "persist" в firebug, похоже, перенаправляется только один раз.

немного больше информации о моем сервлете ... он работает в tomcat и передан apache с помощью "mod-proxy-ajp". Также следует отметить, что он использует проверку подлинности формы, поэтому любой URL-адрес должен перенаправить вас на страницу входа. Как я уже сказал, это работает правильно во всех браузерах, но по какой-то причине перенаправление не работает с URLConnection в Java 6.

Спасибо за чтение ... идеи?

4 ответов


это, по-видимому, перенаправление в бесконечном цикле, потому что вы не поддерживаете сеанс пользователя. Сеанс обычно поддерживается файлом cookie. Вам нужно создать CookieManager перед использованием URLConnection.

// First set the default cookie manager.
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

// All the following subsequent URLConnections will use the same cookie manager.
URLConnection connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

Читайте также:


Duse, у меня есть добавить эту строку:

java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);

посмотреть этот пример:

java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);
String buf="";
dk = new DAKABrowser(input.getText());
try {
    URL url = new URL(dk.toURL(input.getText()));
    DataInputStream dis = new DataInputStream(url.openStream());
    String inputLine;
    while ((inputLine = dis.readLine()) != null) {
        buf+=inputLine;
        output.append(inputLine+"\n");
    }
    dis.close();
} 
catch (MalformedURLException me) {
    System.out.println("MalformedURLException: " + me);
}
catch (IOException ioe) {
    System.out.println("IOException: " + ioe);
}
titulo.setText(dk.getTitle(buf));

Я использовал Дженкинса на Tomcat6 в среде unix и получил эту ошибку. По какой-то причине обновление до Java7 решило это. Мне было бы интересно узнать, почему это все исправило.


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

рассмотрим ниже мой ресурс

  @GET
  @Path("booksMasterData")
  @Produces(Array(core.MediaType.APPLICATION_JSON))
  def booksMasterData(@QueryParam("stockStatus") stockStatus : String): Response = {
 // some logic here to get the books and send it back
    }

и вот клиентский код, который пытался подключиться к моему вышеуказанному ресурсу

ClientResponse clientResponse = restClient.resource("http://localhost:8080/booksService").path("rest").path("catalogue").path("booksMasterData").accept("application/boks-master-data+json").get(ClientResponse.class);

и ошибка шла точно над линией.

в чем была проблема?

мой ресурс использовал

"application / json"

на

аннотации@produces

и мой клиент с помощью

accept ("application / boks-master-data+json") и это было проблемой.

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

принять - > "приложение/json" заголовок

он работал нормально, однако с

Accept-> заголовок "application/boks-master-data+json" это не так.

и снова, даже почтальон не давал мне правильную ошибку. Ошибка была слишком общей. Смотрите изображения ниже Для справки. Generic error message