2011-07-13 14 views
11

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

誰もがTIdSSLIOHandlerSocketについて言いますが、私はTIdSSLIOHandlerSocketOpenSSLしか持っていません。 TIdSSLIOHandlerSocketOpenSSLを使用すると、「SSLライブラリを読み込めませんでした」というエラーが表示されます。 何人かの人々はライブラリが必要だと言う人もいますが、ほとんどの人はそれについて言及していません。ここからhttp://www.indyproject.org/sockets/SSL.EN.aspxのライブラリを使用する必要がありますか?

これらのDLLは、プログラムのフォルダにあります。に従って:http://edn.embarcadero.com/article/31279 "実行時に、Indyはlibeay32.dllとssleay32.dllを読み込もうとします。"私はインディが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; 

なぜこのエラーが発生しますか? 私はインディのOpenSSLのクラスを使用するにはデルファイ2010

+4

'TIdSSLIOHandlerSocket'は、Indy 9のクラス名です。' TIdSSLIOHandlerSocketOpenSSL'は、Indy 10の新しいクラス名です。 –

答えて

7

を持って、あなたはssleay32.dllをlibeay32.dllを必要としています。おそらく、あなたが実行しようとしたIndyコードの例外のソースから明らかになっているはずです。

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

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

+0

何をどのように使用するかは重要ではありません。私はidHTTP + SSLを使用してファイルをダウンロードする必要があります。あなたは使用例を提供できますか?私はそれをお願い申し上げます。ありがとう。 – maxfax

+0

@maxfaxこれらのDLLを使用して、「SSLライブラリを読み込めませんでした」という例外が解決されました。 –

+0

私はそれらをプログラムのフォルダに持っています!それらをTIdSSLIOHandlerSocketOpenSSLにリンクする方法は? – maxfax

0

私は同じ問題を抱えていましたが、私は32ビットマシン上でDelphi 2010をコンパイルして使用します。 TIdHTTPを使用してHTTP URLのみを呼び出すと、32bと64bの両方で正常に機能しました。

は、その後、私はHTTPSのURLを呼び出すために必要な、私は、すべての指示に従ったこのコード

IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
    IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; 

を追加したと私は

「2011年4月10日(日曜日)午前1時21 exeファイルフォルダに2つのDLLを置きますopenssl-0.9.8r-i386-win32-rev2.zip PM 850543ソケットのErr "


は、今では、私は、エラーを得る64Bマシン上32bのマシン上で正常に動作しますが、"または#10060. 接続がタイムアウトしました。 "

私は

誰もが同じ問題を抱えていた「SSLライブラリをロードできませんでした」念のため、彼らはエラーを生成し、64ビットのDLLを試してみましたか?多分もっとコードを投稿すべきでしょうか?

---編集--- 32ビットマシンはWin7を実行し、64ビットマシンはWin8を実行します。

+0

解決済み、それは64b問題ではなく、勝利8問題でした。 が、私はここに解決策を見つけた http://stackoverflow.com/questions/14756882/indy10-openssl-send-email-code-stopped-working-on-windows-8 IdHTTP1.ReadTimeout:= 30000; – Milan

1

いくつかはM $ Studioへのリンクでコンパイルされているため、正しいDLLを入手することが不可欠です。したがって、Delphiでは動作しません。お試しくださいhttps://indy.fulgan.com/SSL/ 最新バージョンはページの一番下にあります。