Delphi: idHttp + SSL - PullRequest
       7

Delphi: idHttp + SSL

11 голосов
/ 13 июля 2011

Объясните мне, пожалуйста, как загрузить файл с сервера с использованием SSL (https://). Я не нашел подходящего ответа в Интернете.

Все говорят о TIdSSLIOHandlerSocket, но у меня есть только TIdSSLIOHandlerSocketOpenSSL. У меня ошибка «не удалось загрузить библиотеку SSL», если я использую TIdSSLIOHandlerSocketOpenSSL. Некоторые люди говорят, что для этого нужна библиотека, но большинство даже не упоминают об этом. Нужно ли использовать библиотеки здесь http://www.indyproject.org/sockets/SSL.EN.aspx?

У меня есть эти DLL в папке программы. Согласно: http://edn.embarcadero.com/article/31279 "Во время выполнения Indy пытается загрузить libeay32.dll и ssleay32.dll." Я не знаю, откуда Indy пытается загрузить DDL -> у меня ошибка: «Не удалось загрузить библиотеку SSL.»

procedure TForm1.FormCreate(Sender: TObject);
    var  UpdateMemoryStream:tmemorystream;
    begin
    try
    UpdateMemoryStream:=TMemoryStream.Create;
                try
                idhttp2.Get('https://example.com/list.rar',UpdateMemoryStream); //I have: Exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'
                except
                    on E : Exception do 
                    begin showmessage('Error: '+E.Message); 
                    end;
                end;
    UpdateMemoryStream.SaveToFile('d:\1.rar');
    finally
    UpdateMemoryStream.Free;
    end;
    end;

Почему у меня есть эта ошибка? У меня Delphi 2010.

Ответы [ 3 ]

7 голосов
/ 13 июля 2011

Чтобы использовать Indy's OpenSSL класс, вам нужны ssleay32.dll и libeay32.dll .Это, вероятно, должно было быть очевидно из источника исключения в коде Indy, который вы пытались выполнить.

Библиотеки связаны со страницей Indy, упомянутой в вопросе.Если вам по закону разрешено это делать, вы можете распространять их вместе со своим приложением.Поместите их туда, куда идут библиотеки DLL (обычно это каталог вашего приложения).

TIdSSLIOHandlerSocketOpenSSL является специфичным для OpenSSL потомком абстрактного класса TIdSSLIOHandlerSocket.Если бы вы использовали какую-то другую библиотеку SSL вместо OpenSSL, вы бы использовали другой класс-потомок.

6 голосов
/ 14 июля 2011

Загрузите openssl-1.0.0d-i386- win32 -rev2.zip, а не openssl-1.0.0d-x64_86- win64 -rev2.zip из http://indy.fulgan.com/SSL/

Читайте здесь тоже: https://forums.embarcadero.com/thread.jspa?threadID=15569

1 голос
/ 03 ноября 2017

Важно получить правильные библиотеки DLL, так как некоторые из них скомпилированы со ссылками на M $ Studio и поэтому не работают в Delphi. Попробуйте https://indy.fulgan.com/SSL/ Последние версии находятся внизу страницы.

...