Delphi - форма отправки для сайта Apple

Delphi - форма отправки для сайта Apple

Заказчиком из Германии была поставлена цель создать программу, которая могла бы позволить автоматически заполнять формы на сайте Apple.

Мы проанализировали структуру формы отправки на заданном сайте: все ее параметры обрабатываются с помощью Яваскрипт, подгружаются, шифруются и отправляются на сервер с помощью Ajax запроса. Компонент Delphi WebBrowser – это эмуляция IE3, структуру такого Dom-объекта и его клиентские скрипты он не поддерживает, и, соответственно, добиться корректной работы в этом компоненте нельзя. Все существующие компоненты типа WebBrowser ведут себя таким же образом. Они рассчитаны на простые формы с простыми скриптами. Минимальный браузер с которым работает сайт Apple – это IE7. Это видно из скриптов, в котором они прописывают патчи для этой версии. Расширить компонент на 4 версии вверх слишком трудозатратно, как материально, так и по времени.
Поэтому мы разработали решение, которое не будет использовать компонент браузер, но при этом приложение будет справляться с поставленной задачей, а именно заполнять форму должным образом и отправлять на сервер.
Мы вынесли все необходимые поля, которые использует  форма в интерфейс Delphi. Мы исследовали, как именно передаются данные из формы на сервер. Оказалось, что все данные проходят многоступенчатое шифрование с помощью Javascript. Существует компонент в Delphi, который способен обрабатывать Jscript(не путать с Javascript, т.к. Jscript не поддерживает работу с DOM).
Мы обработали js-скрипты, которые использует сайт Apple таким образом, чтобы его мог правильно откомпилировать компонент Delphi, и получить на выходе нужное нам шифрование данных из формы, которые понимает серверный сценарий обработки данных формы.
Таким образом, мы получили строку для отправки на сервер с необходимыми значениями, такими, какие бы отправлял современный браузер.
Еще одна проблема, которая встала на пути – это отправка данных, поскольку данные отправляются по защищенному протоколу SSL, а встроенные компонент Indy работает некорректно с этим протоколом и часто глючит, мы решили использовать более надежное средство для отправки данных, а именно библиотеку synapse.

Ссылка на сайт