Получение "java.net.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));
Я использовал Jenkins на 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);
И ошибка была точно на линии выше.
В чем была проблема?
Мой ресурс использовал
"Применение / JSON"
в
@ Продукция аннотации
и мой клиент использовал
принять ("application/boks-master-data+json"), и это было проблемой.
Мне потребовалось много времени, чтобы выяснить это, поскольку ошибка не была связана с этим. Прорыв был, когда я пытался получить доступ к своему ресурсу в почтальоне с
Accept-> заголовок "application / json"
он работал нормально, однако с
Accept-> "application/ boks-master-data + json" заголовок не имеет.
И снова, даже Почтальон не давал мне правильной ошибки. Ошибка была слишком общей. Пожалуйста, смотрите ниже изображение для справки.