2016-02-09 45 views
6

在我的應用程序中,我使用IdHTTP.Get。代碼的一部分:Indy 10 - IdHTTP.Get raise「無法加載SSL庫」

var 
    IdHTTP: TIdHTTP; 
begin 
    IdHTTP := TIdHTTP.Create(nil); 
    Output := IdHTTP.Get(url); 
    ... 
    IdHTTP.Free; 

使用IdHTTP.Version給我的版本:10.6.2.5263

我從here下載了OpenSSL的,兩者的libeay32.dll和ssleay32.dll都在同一個文件夾我的應用程序。

由於我在使用Windows 10的新筆記本電腦時發生此問題。 我希望有人能告訴我如何解決這個問題!

+3

在IdSSLOpenSSLHeaders單元中使用Indy的'WhichFailedToLoad()'函數來找出哪個DLL加載失敗。 – whosrdaddy

+1

檢查傳出連接的(應用程序特定)塊的防火牆設置 – mjn

+1

@whosrdaddy謝謝,它似乎只有libeay32.dll加載失敗 – Teun

回答

2

如果您需要訪問https url,則必須添加一些代碼,以完成TidHTTP組件的creacion。

嘗試使用這樣的:

// create components 
HTTPs := Tidhttp.Create(nil); 
IdSSL := TIdSSLIOHandlerSocket.Create(nil); 
// try..finally for free 
try 
    // ini 
    HTTPs.ReadTimeout := 30000; 
    HTTPs.IOHandler := IdSSL; 
    IdSSL.SSLOptions.Method := sslvTLSv1; 
    IdSSL.SSLOptions.Method := sslvTLSv1; 
    IdSSL.SSLOptions.Mode := sslmUnassigned; 
    ... 

您需要添加IdSSLOpenSSL到使用條款。

+1

我之前提到的代碼對我來說很有用,它在我使用的其他計算機上仍然有效。它只在我的新筆記本電腦上沒有。所以我認爲代碼不是問題。 – Teun

+2

請參閱http://www.indyproject.org/sockets/blogs/ChangeLog/20141222.en.aspx,簡單用例不需要IOHandler創建代碼 – mjn