Бесконечный цикл перенаправления в HTTP-запросе - PullRequest
5 голосов
/ 19 июля 2011

Я получаю слишком много ошибок перенаправления перенаправления от URLConnection при попытке получить www.palringo.com

    URL url = new URL("http://www.palringo.com/");      
    HttpURLConnection.setFollowRedirects(true);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    System.out.println("Response code = " + connection.getResponseCode());

выводит страшное:

Exception in thread "main" java.net.ProtocolException: Server redirected too many  times (20)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

Согласно wget есть толькоодно перенаправление от www.palringo.com до www.palringo.com/en/gb/

Есть идеи, почему мой запрос с использованием URLConnection для /en/gb приводит к другому 302 ответу для того же ресурса?

Проблема иллюстрируется:

    URL url = new URL("http://www.palringo.com/en/gb/");        
    HttpURLConnection.setFollowRedirects(false);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    // Just for testing, use Chrome header, to eliminate "anti-crawler" response!
    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30");
    System.out.println("Response code = " + connection.getResponseCode());

Это выводит:

Response code = 302
Redirected to /en/gb/

отсюда бесконечный цикл перенаправления.

Интересно, хотя браузеры и wgetсправиться с этим, curl не:

joel@bohr:/tmp$ curl http://www.palringo.com/en/gb/
curl: (7) couldn't connect to host

Запрос на /en/gb/ перенаправляется на /en/gb/ точно один раз.

Ответы [ 4 ]

12 голосов
/ 19 июля 2011

Проблема в том, что ваш HttpURLConnection (или любой другой код, который вы используете - извините, я НЕ знаком с Java) не использует куки .

Отключите куки в браузере и наблюдайте точно такое же поведение - бесконечное перенаправление.

Причина: Сервер проверяет, установлен ли файл cookie. Если не установлен - он устанавливает и перенаправляет. Поскольку файлы cookie не поддерживаются / не отключаются, сценарий на стороне сервера перенаправляет снова и снова.

Решение: Включите / добавьте поддержку cookie в свой код и повторите попытку.

0 голосов
/ 11 ноября 2015

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

0 голосов
/ 19 июля 2011

Проблема на стороне сервера.Это может быть нарушенное правило перезаписи Apache httpd, которое отправляет перенаправления, возвращающие этот цикл обратно в то же место.Это может быть что-то еще.Что бы это ни было, вы вряд ли сможете исправить это на стороне клиента.


Я в основном запускаю сканер и только что заметил эту проблему.

Ах.

Возможно, это мера защиты от гусеничных движений. "Хммм ... выглядит как один из тех надоедливых сканеров, которые игнорируют мой файл robots.txt, тратят всю мою пропускную способность и крадут мой драгоценный контент. Позволяет ему немного страдать с циклом перенаправления !!" .

Убедитесь, что ваш сканер подчиняется протоколу "robots.txt".Проверьте ToS для сайта, который вы сканируете, чтобы узнать, разрешено ли то, что вы делаете.

Возможно, вы правы, но если так, то почему wget и браузеры справляются с этим одним перенаправлением?

Возможно, потому что сервер просматривает заголовки запросов или ваш шаблон запросов.


Условия предоставления услуг (что я вижу)произнесите следующее:

"Вы соглашаетесь не использовать Службу для: ... xiii - Запускайте любые автоматизированные системы, процессы, сценарии или ботов для любых целей без письменного разрешения Palringo."

Возможно, сканирование их сайта является нарушением этого.

0 голосов
/ 19 июля 2011

Я думаю, что перенаправление определяется с помощью шаблона, как / * -> / en / gb Итак, когда вы попадаете в / en / gb, правило перенаправления снова работает.

Проверьте ваши правила перенаправления. Где они определены? В веб-сервере Apache или в другом месте? Проверить все. Убедитесь, что это (или нет) случай и исправьте правила соответствующим образом.

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