13

SSL (https://) を使用してサーバーからファイルをダウンロードする方法を教えてください。インターネットで適切な答えを見つけられませんでした。

誰もが TIdSSLIOHandlerSocket について言いますが、私は TIdSSLIOHandlerSocketOpenSSL しか持っていません。TIdSSLIOHandlerSocketOpenSSL を使用すると、「SSL ライブラリをロードできませんでした」というエラーが発生します。ライブラリが必要だと言う人もいますが、ほとんどの人はそれについて言及していません。ここ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を持っています。

4

3 に答える 3

9

Indy の OpenSSL クラスを使用するには、 ssleay32.dlllibeay32.dllが必要です。これは、実行しようとした Indy コードの例外のソースから明らかなはずです。

ライブラリは、質問に記載されている Indy ページからリンクされています。法的に許可されている場合は、アプリケーションと共に配布できます。DLL がある場所 (通常はアプリケーション ディレクトリ) に置きます。

TIdSSLIOHandlerSocketOpenSSL は、抽象 TIdSSLIOHandlerSocket クラスの OpenSSL 固有の子孫です。OpenSSL の代わりに他の SSL ライブラリを使用していた場合は、別の子孫クラスを使用します。

于 2011-07-13T18:12:19.033 に答える
6

http://indy.fulgan.com/SSL/からopenssl-1.0.0d-x64_86- win64 -rev2.zip ではなく、 openssl -1.0.0d-i386- win32 -rev2.zip をダウンロードします。

こちらもお読みください: https://forums.embarcadero.com/thread.jspa?threadID=15569

于 2011-07-13T21:15:08.487 に答える