2016-02-09 23 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