Indy+SSL. Загрузка https-страниц. TIdHTTP+SSL

2 минуты на чтение

Всем привет, небольшая заметка о том, как можно с помощью компонентов 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

Исходник прилаживать не буду, кому необходимо будет, скажите в комментариях.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Давайте в этой статье поговорим, как можно скачть файл из сети Интернет с помощью TidHTTP да и еще так, чтобы при этом наша форма не зависала и можно было во время скачивания выполнять какие-то другие функции программы, например набирать текст в TMemo. Для это...
Ну что давайте теперь поговорим о том, как можно в потоке обработать запрос GET или POST компонента TIdHTTP. Это довольно распространнено, так как не все делают запросы с помощью сокетов, среди «дельфистов» есть и любители «индюшек» (Indy) и их может даже и бо...
Как и обещал статья о загрузки файла из Интернет с помощью модуля wininet. Как мы скачивали файл с помощью TidHTTP можно посмотреть тут. Довольно мощная библиотека и много можно что с ней делать, но пока что остановимся на загрузке файлов из сети интернет с по...