Как обработать редирект? (Delphi)
В прошлых уроках мы уже немного научились работать с компонентом 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/'); |
Адрес разумеется подставляйте свой. Теперь все редиректы обработаются сами сколько бы их там не было.
Понравилась статья? Жми: | Поделиться в соц. сетях |