代码之家  ›  专栏  ›  技术社区  ›  Fabrizio RAHUL S R

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

  •  0
  • Fabrizio RAHUL S R  · 技术社区  · 6 年前

    TImage 从URL开始,如中所述 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值无效。

    我试着添加一个 TIdSSLIOHandlerSocketOpenSSL IOHandler TIdHTTP 组件。

    enter image description here enter image description here

    做完之后,我得到了一个 EIdOSSLCouldNotLoadSSLLibrary 出现以下异常消息:

    无法加载SSL库。

    物业有什么问题吗?

    1 回复  |  直到 6 年前
        1
  •  7
  •   HeartWare    6 年前

    似乎可以在这里下载:

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

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

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

    与Indy一起使用的预编译DLL可在以下位置下载:

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

        2
  •  4
  •   Remy Lebeau    6 年前

    EIdIOHandlerPropInvalid 异常消息:

    IOHandler值无效。

    TIdSSLIOHandlerSocketBase -附加到 TIdHTTP.IOHandler 属性,例如 TIdSSLIOHandlerSocketOpenSSL

    这个错误还告诉我你使用的是一个过时的Indy版本,需要升级。 TIdHTTP 自动创建默认值 SSLIOHandler 请求HTTPS url时 IOHandler 当前已分配,并且 has done so for a long time .

    TIdSSLIOHandlerSocketOpenSSL 设置为 对于 TIdHTTP

    如果您不想升级,或者需要自定义 SSLIOHandler公司 设置,例如启用TLS 1.1+(其中 does not do by default yet

    做完之后,我得到了一个 EIdOSSLCouldNotLoadSSLLibrary 出现以下异常消息:

    出现错误后,可以使用Indy的 WhichFailedToLoad() IdSSLOpenSSLHeaders

    推荐文章