Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Delphi中从HTTPS URL获取图像?_Delphi_Indy_Delphi 2007 - Fatal编程技术网

如何在Delphi中从HTTPS URL获取图像?

如何在Delphi中从HTTPS URL获取图像?,delphi,indy,delphi-2007,Delphi,Indy,Delphi 2007,我正在尝试从URL开始加载TImage,如中所述 如果URL以一个简单的HTTP开头,所有这些都可以正常工作 当我尝试从HTTPS URL加载时,我得到一个EIdIOHandlerPropInvalid异常消息: IOHandler值无效 我尝试添加一个TIdSSLIOHandlerSocketOpenSSL,并将其设置为TIdHTTP组件的IOHandler 执行此操作后,我得到一个eidosslcoldnotloadssllibrary异常,并显示以下消息: 无法加载SSL库 属性中是否

我正在尝试从URL开始加载
TImage
,如中所述

如果URL以一个简单的HTTP开头,所有这些都可以正常工作

当我尝试从HTTPS URL加载时,我得到一个
EIdIOHandlerPropInvalid
异常消息:

IOHandler值无效

我尝试添加一个
TIdSSLIOHandlerSocketOpenSSL
,并将其设置为
TIdHTTP
组件的
IOHandler

执行此操作后,我得到一个
eidosslcoldnotloadssllibrary
异常,并显示以下消息:

无法加载SSL库

属性中是否有错误或其他问题?

您需要在Windows中安装SSL库(两个.DLL文件),或者随应用程序一起分发

似乎可以在这里下载:

或者通过他们的官方网站(但我在那里找不到可下载的二进制文件-只有源代码):

与Indy一起使用的预编译.dll可在此处下载:

(谢谢,Zed)

您需要在Windows中安装SSL库(两个.DLL文件),或者随应用程序一起分发

似乎可以在这里下载:

或者通过他们的官方网站(但我在那里找不到可下载的二进制文件-只有源代码):

与Indy一起使用的预编译.dll可在此处下载:

(谢谢,泽德)

当我尝试从HTTPS URL加载时,我得到一个
EIdIOHandlerPropInvalid
异常消息:

IOHandler值无效

该错误意味着您没有将
TIdSSLIOHandlerSocketBase
派生组件附加到
TIdHTTP.IOHandler
属性,例如
TIdSSLIOHandlerSocketOpenSSL

此错误还告诉我,您使用的是过时的Indy版本,需要升级
TIdHTTP
在请求HTTPS url时自动创建默认的
SSLIOHandler
,当前未分配任何
IOHandler
,并且

我尝试添加一个
TIdSSLIOHandlerSocketOpenSSL
,并将其设置为
TIdHTTP
组件的
IOHandler

如果您不想升级,或者需要自定义
SSLIOHandler
设置,例如启用TLS 1.1+(即
tidsliohandlersocketopenssl
),这是正确的解决方案

执行此操作后,我得到一个
eidosslcoldnotloadssllibrary
异常,并显示以下消息:

无法加载SSL库

这个错误意味着

  • 您尚未在应用程序中部署OpenSSL dll(
    libeay32.dll
    ssleay32.dll
    ),或者至少在系统的某个位置安装了它们

  • 您使用的DLL版本与您的Indy版本不兼容。Indy的当前版本支持OpenSSL 1.0.2及更早版本(支持OpenSSL 1.1.x)

出现错误后,您可以在
IdSSLOpenSSLHeaders
单元中使用Indy的
WhichFailedToLoad()
函数来确定故障的根本原因-DLL本身是否无法加载到内存中(因为找不到它们等),或者因为它们缺少Indy需要的特定导出

当我尝试从HTTPS URL加载时,我得到一个
EIdIOHandlerPropInvalid
异常消息:

IOHandler值无效

该错误意味着您没有将
TIdSSLIOHandlerSocketBase
派生组件附加到
TIdHTTP.IOHandler
属性,例如
TIdSSLIOHandlerSocketOpenSSL

此错误还告诉我,您使用的是过时的Indy版本,需要升级
TIdHTTP
在请求HTTPS url时自动创建默认的
SSLIOHandler
,当前未分配任何
IOHandler
,并且

我尝试添加一个
TIdSSLIOHandlerSocketOpenSSL
,并将其设置为
TIdHTTP
组件的
IOHandler

如果您不想升级,或者需要自定义
SSLIOHandler
设置,例如启用TLS 1.1+(即
tidsliohandlersocketopenssl
),这是正确的解决方案

执行此操作后,我得到一个
eidosslcoldnotloadssllibrary
异常,并显示以下消息:

无法加载SSL库

这个错误意味着

  • 您尚未在应用程序中部署OpenSSL dll(
    libeay32.dll
    ssleay32.dll
    ),或者至少在系统的某个位置安装了它们

  • 您使用的DLL版本与您的Indy版本不兼容。Indy的当前版本支持OpenSSL 1.0.2及更早版本(支持OpenSSL 1.1.x)


出现错误后,您可以在
IdSSLOpenSSLHeaders
单元中使用Indy的
WhichFailedToLoad()
函数来确定故障的根本原因-DLL本身是否无法加载到内存中(因为找不到它们等),或者因为它们缺少Indy需要的特定导出。

我的应用程序是32位的,我将从openssl-1.0.2q-i386-win32.zip下载的
libeay32.dll
ssleay32.dll
放在可执行文件夹中。在错误
之后,该错误导致加载失败
函数结果:
SSL\u CTX\u set\u info\u callback\u indy X509\u STORE\u CTX\u get\u app\u indy X509\u get\u not before\u indy X509\u get\u notAfter\u indy SSL\u SESSION\u id\u indy SSL\u SSL\u id\u CTX\u indy SSL\u indy SSL\u CTX\u获取版本\u indy SSL\u设置选项\u des奇偶校验码DLL与我的Indy版本不兼容。我用的是印地版
uses
  GIFImg;

procedure TForm1.Button1Click(Sender: TObject);
var
  Stream : TMemoryStream;
  GIF : TGIFImage;
begin
  Stream := TMemoryStream.Create;
  GIF := TGIFImage.Create;
  try
    IdHTTP1.Get('http://www.google.com/intl/en_ALL/images/logo.gif', Stream);
    //IdHTTP1.Get('https://www.google.com/intl/en_ALL/images/logo.gif', Stream);

    Stream.Position := 0;
    GIF.LoadFromStream(Stream);

    Image1.Picture.Assign(GIF);

  finally
    FreeAndNil(GIF);
    FreeAndNil(Stream);
  end;
end;