Хотите прямо сейчас получить бесплатный видеокурс по программированию для начинающих?

Как обработать редирект? (Delphi)

Июль 6, 2013

301-redirect (1)В прошлых уроках мы уже немного научились работать с компонентом idHTTP. Мы уже научились получать исходный код и ориентироваться по нему.

Но иногда на страницах встречается перенаправление на другие страницы, так называемый редирект. Сейчас если мы пошлем нашу программ на такие страницы — ничего путного не выйдет.

Давайте научимся его обрабатывать:



Скачать урок

Ну чтож давайте еще раз пройдемся по коду:

1
2
3
4
5
6
7
8
try                                                   //cоздаем конструкцию try...except для отключения ошибок
idhttp1.Get('http://programmerinfo.ru/cfromzero/');   //посылаем запрос на котором может быть редирект
except                                              
end;                                                  //конец конструкции try...except
if (idhttp1.Response.ResponseText='HTTP/1.1 302 Moved Temporarily') then //Если сервер ответил нам редиректом то
idhttp1.Get(idhttp1.Response.Location);                                  //посылаем запрос на новую страницу
 
memo1.Lines.Add(idhttp1.Response.ResponseText);                          //записываем результат в memo1

Это самый простой пример обработки редиректа.

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

Например это удобно делать через рекурсию:

1
2
3
4
5
6
7
8
9
procedure GoURL(s:string);                             //создаем отдельную процедуру для перехода на конкретный URL
begin
try                                                   //cоздаем конструкцию try...except для отключения ошибок
form1.idhttp1.Get(s);   //посылаем запрос на котором может быть редирект
except                                              
end;                                                  //конец конструкции try...except
if (form1.idhttp1.Response.ResponseText='HTTP/1.1 302 Moved Temporarily') then //Если сервер ответил нам редиректом то
GoURL(form1.idhttp1.Response.Location);                     //повторно вызываем эту же процедуру
end;

Примерно так, тогда в нужно месте вашей программы вызовите

1
GoURL('http://programmerinfo.ru/cfromzero/');

Адрес разумеется подставляйте свой. Теперь все редиректы обработаются сами сколько бы их там не было.



Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Поддержите проект

Хит продаж:

Случайный анекдот

Моя вторая книга

Что это???

Программирование для Android:

Мы вконтакте

Помощь сайту

Понравился сайт? Он сильно нуждается в раскрутке.

Чтобы помочь в раскрутке - опубликуйте ссылку на сайт (или любую его страницу) на любом другом сайте в интернете. Тогда сайт станет чуточку популярнее.

Или просто нажмите на кнопки социальных сетей которые стоят в конце каждой статьи

Вместе мы сможем сделать программирование более популярным и более понятным для всех!

Заранее спасибо!
Артём Кашеваров.