На этом блоге была серия статей, посвященная альтернативному
Cookie Manager. Начало всей истории положила
первая статья, в которой было приведено довольно простое решение, которое позволяло обрабатывать Cookies отдельно, не используя "родной" менеджер куков
Indy, прославленный своими глюками и изменениями внутренней структуры от версии к версии.
Собственно все эти глюки и изменения заставили автора этого блога написать свой
Cookie Manager, причем не в виде наследника стандартного компонента
TIdCookieManager, а виде набора простых функций. Почему не в виде наследника? Потому что от версии к версии внутренняя структура "родного" менеджера куков
Indy менялась, и очень не хотелось создавать решение, зависящее от конкретной версии. Простой набор функций показался в этом смысле более приемлемым решением. К тому же
Indy славится также своими глюками при работе с национальными символами, поэтому на взгляд автора надо наследовать целиком компонент
TIdHTTP для использования в своих проектах. Для корректной работы с методами
GET и
POST предложены решения, которые устраняют известные проблемы с русскими символами в
TIdHTTP.
В процессе работы с альтернативным
Cookie Manager возникали неизбежные
доработки,
ошибки и
проблемы, которые постепенно устранялись. В итоге, чтобы собрать нормально работающий
TIdHTTP вместе с альтернативным
Cookie Manager, внимательному читателю необходимо было приложить определенные усилия.
Так как альтернативный
Cookie Manager стал пользоваться некоторой популярностью, я решил написать работающий пример с его использованием. В этом примере также используются доработанные методы
GET и
POST, не имеющие проблем с русской кодировкой, работает пример через протокол
HTTPS и возвращаемый
HTML код показывается в окне
TWebBrowser. Фактически этот пример явился итогом применения нескольких полезных технологий.
Да, в этом примере мы подключаемся к известному сервису
livejournal.com по
HTTPS, выполняем логин к существующему живому журналу, затем переходим к странице настройки внешнего вида
ЖЖ. При этом можно увидеть куки, которые сохраняются и предаются между шагами. Скачать исходные коды проекта можно по
этой ссылке.
Проект компилировался автором в Delphi 2009 с использованием Indy 10.5.5. В проекте присутствуют необходимые SSL библиотеки для работы через HTTPS. После успешной компиляции и запуска мы увидим следующий экран:
В полях Login и Password введите имя существующего пользователя livejournal.com и его пароль.
Поле HTML будет показывать "чистый" HTML код ответов после выполнения GET и POST, поле Cookies будет показывать возвращенные после последнего выполненного шага куки, в поле TWebBrowser вы будете видеть HTML код в окне браузера.
Первым шагом выполняется простой GET запрос страницы авторизации на ЖЖ по протоколу HTTPS. Вообще говоря этот шаг не является обязательным. В TWebBrowser вы должны увидеть примерно следующее:
Вторым шагом выполняется POST запрос с параметрами имени пользователя и паролем, которые вы ввели. В случае успешной авторизации вы увидите примерно следующее:
Видно также, что наш Cookie Manager считал много куков:
Третьим шагом выполняем переход на страницу настройки внешнего вида пользователя:
Переход на эту страницу был бы невозможен, если бы наш Cookie Manager неправильно работал с куками. Попробуйте, например, очистить куки между 2 и 3 шагами.
Как все это работает будет понятно из исходного кода примера, а также из статей, ссылки на которые даны в начале этой статьи.
P.S. Для того, чтобы развить этот пример, было бы неплохо сделать выбор оформления
ЖЖ и выполнить
POST с соответствующими параметрами. Но сделать это оказалось не так то просто, так как этот функционал в
ЖЖ реализован на жестком
Java Script. Как работать с
Java Script в
Delphi я уже рассказывал на страницах этого блога, но до решения этой крайне интересной и полезной задачи у автора руки пока не дошли. Если вы реализуете выбор оформления
ЖЖ на
Delphi в продолжение этого примера, поделитесь, пожалуйста, с общественностью вашим решением, я опубликую его на этом блоге с указанием авторства.
Смотрите также:
Оставьте свой комментарий
Вы должны быть авторизированны, чтобы оставить комментарий.