我正在开发一个使用Indy 10下载网站的旧的Delphi 7应用程序。我在某些SSL页面上遇到了困难,而不是全部。
版本数据:
印第10 "libeay32.dll":1.0.2.19 @31-5-19 "ssleay32.dll":1.0.2.19 @31-5-19
当试图使用SSL (例如"https://davisashura.com/")在IdSSLOpenSSLHeaders单元(即Rev.1.8)下载某些页面时,以下过程将引发指定的错误:
class procedure EIdOpenSSLAPISSLError.RaiseExceptionCode(const AErrCode, ARetCode: TIdC_INT; const 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;有人知道怎么解决这个问题吗?
发布于 2019-08-26 17:38:26
EOF错误仅仅意味着服务器在TLS握手期间关闭其套接字连接的结束,而不首先发送TLS警报。这意味着服务器不喜欢握手中的某些内容,并且正在退出。最有可能的罪魁祸首是TLS版本。
默认情况下,TIdSSLIOHandlerSocketOpenSSL只启用TLS1.0,但现在许多站点需要TL1.1或1.2。您可以使用TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions属性启用TL1.1和1.2。
HTTP := TIdHTTP.Create;
HTTP.Request.UserAgent := 'Mozilla/5.0 (compatible; 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'; // some websites don't download with this set
HTTP.Compressor := TIdCompressorZLib.Create(HTTP);
HTTP.HTTPOptions := HTTP.HTTPOptions + [hoForceEncodeParams, hoInProcessAuth];
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
SSL SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; // <-- ADD THIS!
HTTP.IOHandler := SSL;Indy的问题跟踪器中有一个关于这个问题的TODO项目:
https://stackoverflow.com/questions/57655844
复制相似问题