Всем привет, небольшая заметка о том, как можно с помощью компонентов Indy загружать защищенные веб-страницы, да и не только загружать, а в целом работать с ними (запросы: GET, POST). Насколько я знаю, у всех версиях Indy эта проблема давно наблюдается. Ну, а сейчас немного теории. SSL - это протокол, с помощью которого можно осущеставлять безопасное соединение между клиентом и сервером. Вообще, если Вы загружаете в браузере защищенную страницу, то Вы сразу можете прочитать информацию о защищенной странице, например, в браузере GoogleChrome, при загрузке защищенной страницы в адресной строке появляется «замочек», что означает — была загружена защищенная страница.
А, если нажать на этот замочек, то можно посмотреть более подробную информацию о защищенной странице, где Вы сможете посмотреть сертификат безопасности, алгоритм шифрования страницы, данных и многое другое.
Так как, у Indy с данной задачей давненько проблемы, то некоторые пользователи, для того, чтобы получить код защищенной страницы, отправить запрос, получить ответ с сервера, используют компонент TWebBrowser, что очень неудобно, он все таки визуальный.
Ну что, теперь давайте приступим к самому проекту. Что нам необходимо будет, на форме у меня следующие компоненты:
- TIdHTTP
- TIdSSLIOHandlerSocketOpenSSL
Давайте немного настроим эти компоненты, в свойстве компонента TIdHTTP - IOHandler укажем компонент TIdSSLIOHandlerSocketOpenSSL. Это еще не все, если Вы попробуйте загрузить, через запрос GET, защищенную веб-страницу, то естестевенно у Вас будет ошибка. Для всего этого нам необходимо будет скачать последнею версию библиотеки Openssl, но я скачал RunTimePack библиотек и установил их. Нам необходимы только 2-е dll-ки:
- libeay32.dll
- ssleay32.dll
Их, можно скопировать в папку Вашего проекта, или в системный каталог Windows (system32), лучше всего, носить в папке с проектом, так как не у всех пользователей могут быть установлены данные библиотеки.
Все, как только все это сделано, можно загружать защищенные https-страницы обычным способом:
procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
begin
html:=idHTTP1.Get('https://адрес защищенного сайта');
ShowMessage(html);
end;
Если, будете создавать компоненты в run-time, то не забывайте подключать в Uses модули IdSSL, IdSSLOpenSSL.
Версия Indy, на которой тестировался данный код — 10.5.7
Исходник прилаживать не буду, кому необходимо будет, скажите в комментариях.