web-dev-qa-db-ja.com

Delphi:idHttp + SSL

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;

なぜこのエラーが発生するのですか?私はDelphi2010を持っています。

12
maxfax

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

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

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

7
Rob Kennedy

Openssl-1.0.0d-i386-win32-rev2.Zipをダウンロードします。openssl-1.0.0dではありません-x64_86-win64-rev2.Zip from http://indy.fulgan.com/SSL/

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

6
maxfax

一部はM $ Studioへのリンクでコンパイルされているため、Delphiでは機能しないため、正しいDLLを取得することが不可欠です。試してください https://indy.fulgan.com/SSL/ 最新バージョンはページの下部にあります。

1
Leslie Kaye