За последние две недели несколько человек задали мне вопрос (интересное совпадение) о работе компонент indy с HTTPS протоколом. Казалось бы, что в этом сложного, если все уже готово, исходные коды открыты, проблема в том, что люди не хотят сами разбираться. Напишу пару абзацев, чтоб показать самый короткий путь
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для начала немного теории. SSL — криптографический протокол, который обеспечивает установление безопасного соединения между клиентом и сервером. HTTPS — расширение протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS, «упаковываются» в криптографический протокол SSL или TLS, тем самым обеспечивается защита этих данных. В отличие от HTTP, для HTTPS по умолчанию используется TCP-порт 443.
Более подробно написано в википедии ([Ссылки могут видеть только зарегистрированные пользователи. ], [Ссылки могут видеть только зарегистрированные пользователи. ]), рекомендую ознакомится.
А теперь к практике.
Во первых нам потребуется два компонента с пакета indy, а именно TIdHTTP (Indy Clients) и TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers). Если, будете создавать компоненты в run-time, то не забывайте подключать в Uses модули IdSSL, IdSSLOpenSSL.
IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1; //эта строка в комментариях не нуждается
Во вторых нам надо библиотеки [Ссылки могут видеть только зарегистрированные пользователи. ]. Всего две из целого набора: libeay32.dll и ssleay32.dll. Поэтому можно качать lite версию. Согласно документации библиотеки нужно закинуть в системный каталог винды (папку system32), но я держу их в папке с проектом и рекомендую держать их именно там (чуть ниже объясню почему).
Ну, а финалом этой "сложной" работы будет успешное выполнение кода:
Код:
var
html:String;
begin
html:=idHTTP1.Get('https://адрес сайта');
ShowMessage(html);
end;
Все довольно просто, единственная проблема с которой вы можете столкнутся - не совпадение версий библиотек openssl и indy.
В разных версиях - разные точки входа и возможно немного отличаются имена и аргументы функций и ваша программа не сможет правильно работать (или вообще работать). Именно по причине несовпадения версий я рекомендую держать dll-ки вместе с проектом, у юзера в системе могут быть уже установлены библиотеки другой версии (или их может вообще не быть в системе) и программа даст сбой.
У меня прекрасно работает связка indy 10.5.8 + openssl 1.0.1 (самые новые на момент создания темы). Если у вас другие версии, то либо обновите инди, либо качайте более старые библиотеки openssl.
Желаю успешных get/post запросов
________________
В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
Indy 9 (стандартная версия в комплекте с Delphi 7) + OpenSSL 0.9.8g. Сбоев не замечал
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
у меня на делфи7 стояло инди9, проблемка была в то что даже в папку с программой я кидал библиотеки, а она их не находила.
Установил инди10 проблему решил
все очень просто оказалося)