FoxBase!
msgbartop
Блог Oracle разработчика
msgbarbottom
foxbase

09.02.2011 Indy Cookie Manager своими руками. Работающий пример

На этом блоге была серия статей, посвященная альтернативному 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. После успешной компиляции и запуска мы увидим следующий экран:
Indy Cookie Manager
В полях Login и Password введите имя существующего пользователя livejournal.com и его пароль. 
Поле HTML будет показывать "чистый" HTML код ответов после выполнения GET и POST, поле Cookies будет показывать возвращенные после последнего выполненного шага куки, в поле TWebBrowser вы будете видеть HTML код в окне браузера.
Первым шагом выполняется простой GET запрос страницы авторизации на ЖЖ по протоколу HTTPS. Вообще говоря этот шаг не является обязательным. В TWebBrowser вы должны увидеть примерно следующее:
ivejournal
Вторым шагом выполняется POST запрос с параметрами имени пользователя и паролем, которые вы ввели. В случае успешной авторизации вы увидите примерно следующее:
ЖЖ
Видно также, что наш Cookie Manager считал много куков:
Cookie Manager
Третьим шагом выполняем переход на страницу настройки внешнего вида пользователя:
livejournal customize
Переход на эту страницу был бы невозможен, если бы наш Cookie Manager неправильно работал с куками. Попробуйте, например, очистить куки между 2 и 3 шагами.
Как все это работает будет понятно из исходного кода примера, а также из статей, ссылки на которые даны в начале этой статьи. 

P.S.  Для того, чтобы развить этот пример, было бы неплохо сделать выбор оформления ЖЖ и выполнить POST с соответствующими параметрами. Но сделать это оказалось не так то просто, так как этот функционал в ЖЖ реализован на жестком Java Script. Как работать с Java Script в Delphi я уже рассказывал на страницах этого блога, но до решения этой крайне интересной и полезной задачи у автора руки пока не дошли. Если вы реализуете выбор оформления ЖЖ на Delphi в продолжение этого примера, поделитесь, пожалуйста, с общественностью вашим решением, я опубликую его на этом блоге с указанием авторства.

www.foxbase.ru


Смотрите также:



Оставьте свой комментарий

Вы должны быть авторизированны, чтобы оставить комментарий.