delphi XE https接口 出错 Could not load SSL library

    之前编译一个小程序,定时向服务器(http://)通过进行Post上传文件,当客户的服务器换成(https://)时,Post出现“Could not load SSL library”提示,说明需要加载SSL库文件失败。

delphi XE https接口 出错 Could not load SSL library_第1张图片     问题原因:

    1、HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

 2、HTTPS:是以安全为目标的HTTP通道,是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

   3、由于http切换到HTTPS,因此当,网站使用HTTPS协议时,程序调不到库文件,出现“Could not load SSL library”出错信息。  

    网上搜索,找到解决办法:

    一、idhttp控件需要与“IdSSLIOHandlerSocketOpenSSL”控件配对使用,通过“IdSSLIOHandlerSocketOpenSSL”控件,调用SSL。

    操作:加入“IdSSLIOHandlerSocketOpenSSL”控件,并关联idhttp;

    二、TIdSSLIOHandlerSocket控件,调用OpenSSL Library库文件。主要调用,下面两个文件:

    “libeay32.dll”、

    “libssl32.dll”

    记住:这两个文件,要与网站的HTTPS版本相配合,不匹配还是要出错的,用户可以通过   http://indy.fulgan.com/SSL/ 下载。

delphi XE https接口 出错 Could not load SSL library_第2张图片

    操作:下载,逐个解压测试,本人测试好几个版本都能使用。

    这二个Dll应放在执行文件存放的目录中。

    这是本人提供的SSL Dll文件包 openssl-0.9.8i-win32&win64.zip-互联网文档类资源-CSDN下载

    三、设置“IdSSLIOHandlerSocketOpenSSL”的SSlVersions参数

    1、目前有以下五个版本

delphi XE https接口 出错 Could not load SSL library_第3张图片   

   2、与版本相对就的Method,也是五种, 默认是sslvTLSv1。

    匹配,主要是应对服务器的支持,控件和SSL library”的支持,综合因素。这样,你可以试试。

    操作:加入二 个combobox取名cmbcmbSSLVersions和cmbMethod 提供选择:

  case cmbSSLVersions.ItemIndex of
    0: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions  := [sslvSSLv2];
    1: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions  := [sslvSSLv23];
    2: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions  := [sslvSSLv3];
    3: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions  := [sslvTLSv1];
    4: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions  := [sslvTLSv1_1];
    5: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions  := [sslvTLSv1_2];
  end;

  case cmbMethod.ItemIndex of
    0: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv2;
    1: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv23;
    2: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv3;
    3: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1;
    4: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1_1;
    5: IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1_2;
  end;

    这样通过配对测试,快速找到成功匹配。经测试:

sslvSSLv23
sslvTLSv1
sslvTLSv1_1
sslvTLSv1_2

    POST提交请求成功。

   注意:“IdSSLIOHandlerSocketOpenSSL”控件的SSLVersions参数,是个集合类型,可以设置几种版本同时加入这个参数:

 SSLOptions.SSLVersions := [ sslvSSLv23,sslvSSLv1,sslvSSLv1_,sslvSSLv1_1];

你可能感兴趣的:(编程环境,编程技巧,常规控件,开发语言,http,个人开发)