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-7 can和x27的Indy10;t下载一些SSL页面,即使是2019年5月的DLL_Delphi_Openssl_Delphi 7_Indy_Indy10 - Fatal编程技术网

带有Delphi-7 can和x27的Indy10;t下载一些SSL页面,即使是2019年5月的DLL

带有Delphi-7 can和x27的Indy10;t下载一些SSL页面,即使是2019年5月的DLL,delphi,openssl,delphi-7,indy,indy10,Delphi,Openssl,Delphi 7,Indy,Indy10,我正在开发一个旧的Delphi 7应用程序,它使用Indy 10下载网站。我在处理一些(而不是全部)SSL页面时遇到困难 版本数据: 印地10号 “libeay32.dll”:1.0.2.19@19年5月31日 “ssleay32.dll”:1.0.2.19@19年5月31日 尝试使用SSL(例如“”)下载某些页面时,请在IdSSLOpenSSLHeaders单元中,即Rev。1.8,以下程序产生指示错误: 类过程EIdOpenSSLAPISSLError.RaiseExceptionCode(

我正在开发一个旧的Delphi 7应用程序,它使用Indy 10下载网站。我在处理一些(而不是全部)SSL页面时遇到困难

版本数据:

印地10号

“libeay32.dll”:1.0.2.19@19年5月31日

“ssleay32.dll”:1.0.2.19@19年5月31日

尝试使用SSL(例如“”)下载某些页面时,请在
IdSSLOpenSSLHeaders
单元中,即Rev。1.8,以下程序产生指示错误:

类过程EIdOpenSSLAPISSLError.RaiseExceptionCode(常量AErrCode,ARetCode:TIdC\u INT;常量AMsg:String)

初始化代码:

  HTTP := TIdHTTP.Create;

  with HTTP do begin
    Request.UserAgent := 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
    HandleRedirects := True;
    RedirectMaximum := 5;
    ReadTimeout := 20400;
  //Request.AcceptEncoding := 'text/html, deflate, gzip';  // some websites don't download with this set
    Compressor := TIdCompressorZLib.Create;
    IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    HTTPOptions := HTTPOptions + [hoForceEncodeParams, hoInProcessAuth];
  end;

有人知道如何解决这个问题吗?

EOF错误仅仅意味着服务器在TLS握手过程中正在关闭其套接字连接的末端,而没有首先发送回TLS警报。这意味着服务器不喜欢握手中的某些内容,正在退出。最可能的罪魁祸首是TLS版本

默认情况下,
TIdSSLIOHandlerSocketOpenSSL
仅启用TLS 1.0,但现在许多站点需要TLS 1.1或1.2。您可以使用
TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions
属性启用TLS 1.1和1.2

HTTP:=TIdHTTP.Create;
HTTP.Request.UserAgent:=“Mozilla/5.0(兼容;Googlebot/2.1+http://www.google.com/bot.html)';
HTTP.HandleRedirects:=True;
HTTP.RedirectMaximum:=5;
HTTP.ReadTimeout:=20400;
//HTTP.Request.AcceptEncoding:=“text/html,deflate,gzip”;//有些网站不下载此设置
HTTP.Compressor:=TIdCompressorZLib.Create(HTTP);
HTTP.HTTPOptions:=HTTP.HTTPOptions+[hoForceEncodeParams,hoInProcessAuth];
SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);

SSL SSLOptions.SSLVersions:=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];//不经意间(即猜测)——站点支持/需要哪个版本的SSL?Indy的OpenSSL实现中默认启用了那个/那个些版本/版本吗?我也不知道。由于Indy的DLL是今年5月发布的,我想它是最新的。谢谢。如果我启用此选项,它是否仍适用于TLS 1.0?@IamIC yes,因为
sslvTLSv1
(TLS 1.0)包含在启用的版本集中是否应启用其他选项?我注意到还有一些:
sslvSSLv2、sslvSSLv23、sslvSSLv3、sslvTLSv1、sslvTLSv1\u 1、sslvTLSv1\u 2
@IamIC没有人再使用SSL 2.0(sslvSSLv2)或3.0(SSLVSSLVSSLV3),它们很旧,不再安全。除非旧系统需要,否则不要使用它们。即使TLS1.0(sslvTLSv1)现在也开始逐步淘汰,但仍在使用中。当启用多个版本时,SSLV23在内部用作通配符,您不需要直接使用它。@IamIC响应代码不应为-1,这意味着服务器响应格式不正确。至于UserAgent,一些服务器不喜欢/不接受Indy的默认UserAgent,可能是因为多年来使用Indy创建了许多恶意软件/机器人程序,或者只是没有正确编码以处理非浏览器UserAgent。因此,是的,有时您可能会遇到一个服务器,它需要像UserAgent这样的真正的浏览器才能正常工作