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

标签 delphi indy delphi-2007

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

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;

如果 URL 以简单的 HTTP 开头,一切正常。

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

IOHandler value is not valid.

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

enter image description here enter image description here

这样做之后,我得到一个 EIdOSSLCouldNotLoadSSLLibrary 异常,并显示以下消息:

Could not load SSL library.

是属性有问题还是其他什么问题?

最佳答案

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

似乎可以在这里下载:

https://slproweb.com/products/Win32OpenSSL.html

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

https://www.openssl.org/source/

可在此处下载用于 Indy 的预编译 .DLL:

https://indy.fulgan.com/SSL/ (谢谢,Zed)

关于delphi - 如何在 Delphi 中从 HTTPS URL 获取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57972439/

相关文章:

c++ - 使用 Indy 组件,我得到 "connection closed gracefully"错误,但只在某些计算机上

delphi - 在 Delphi 中,我的 DLL 中是否必须分配函数的返回 pchar

delphi - 如何提取 TShellListView 中所选文件的名称?

delphi - 如何从资源管理器启动 RAD Studio 的新实例

delphi - GUID 的高效数据结构

c++ - 通过 Indy UDP 正确发送和接收结构

delphi - 使用 ImageMap 提取图像 (PNG) 并在 TImage 上显示

delphi - 如何确定与 Indy 的连接是否仍然存在?

delphi - TPageControl.OnChange 中的缓慢事件处理程序会导致奇怪的行为

delphi - 在 Delphi 中使用旧式 `object` 而不是 `class` 有好处吗?