Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Can';t使用Delphi打开Https TSL页面-Indy错误:SSL23\u GET\u SERVER\u HELLO_Delphi_Ssl_Https_Indy_Delphi Xe5 - Fatal编程技术网

Can';t使用Delphi打开Https TSL页面-Indy错误:SSL23\u GET\u SERVER\u HELLO

Can';t使用Delphi打开Https TSL页面-Indy错误:SSL23\u GET\u SERVER\u HELLO,delphi,ssl,https,indy,delphi-xe5,Delphi,Ssl,Https,Indy,Delphi Xe5,我想在DelphiXe5中使用Indy的TIdHTTP通过HTTPS阅读HTML页面 ssleay32.dll和libeay32.dll位于主程序文件夹中 我收到一个错误:SSL23\u GET\u SERVER\u HELLO。我能做些什么来解决这个问题 function get_page_text:string; var Response: String; HTTPClient: TidHTTP; const url = 'https://www.lustundreiz.com/

我想在DelphiXe5中使用Indy的
TIdHTTP
通过HTTPS阅读HTML页面

ssleay32.dll
libeay32.dll
位于主程序文件夹中

我收到一个错误:
SSL23\u GET\u SERVER\u HELLO
。我能做些什么来解决这个问题

function get_page_text:string;
var
  Response: String;
  HTTPClient: TidHTTP;
const
  url = 'https://www.lustundreiz.com/login';
begin
  HTTPClient := TidHTTP.Create;
  HTTPClient.AllowCookies := True;
  HTTPClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Response := HTTPClient.get(url);
  HTTPClient.Free;
  result := response;
end;

当您未指定版本时,
TIdSSLIOHandlerSocketOpenSSL
使用的默认SSL/TLS版本是TLSv1,而不是SSLv23。因此,对于您来说,出现SSL23错误是非常罕见的

许多现代Web服务器现在需要TLS 1.1或更高的TLS扩展,如SNI等。因此,在代码< > TysSLooHooLoLoSoCopopsSDS.SSLOPTION中,考虑启用代码< > SLVTLVS1O1/<代码> SSLVTLV1L2 2/代码>,除了默认的<代码> SSLVTLV1之外,SSLVIEWS/<代码>属性。并确保使用最新版本的Indy和OpenSSL DLL来支持这些版本

您还应该将代码包装在
try..finally
中,这样即使
Get()
引发异常,您也可以
释放
TIdHTTP
对象

试试这个:

function get_page_text:string;
var
  HTTPClient: TIdHTTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
const
  url = 'https://www.lustundreiz.com/login';
begin
  HTTPClient := TIdHTTP.Create;
  try
    HTTPClient.AllowCookies := True;
    // set other HTTP properties as needed...

    SSL := TIdSSLIOHandlerSocketOpenSSL.Create(HTTPClient);
    SSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    // set other SSL properties as needed...
    HTTPClient.IOHandler := SSL;

    Result := HTTPClient.Get(url);
  finally
    HTTPClient.Free;
  end;
end;

好的,在我从Delphi XE5更新到Delphi XE10之后,代码运行良好,没有任何错误。
感谢Remy的支持。

感谢您的快速响应,但如果我将您的代码复制到我的IDE中,则第行出现错误:TIdSSLIOHandlerSocketOpenSSL(HTTPClient.IOHandler)。SSLVersions:=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];错误:SSLVersions->notknown@Ingo:对不起,我打错了。我修好了。好的,谢谢你的代码更新。但是如果我运行你的代码,我会得到同样的错误。SSL23\u获取\u服务器\u你好:sslv3警报hanschake故障完整错误代码为:错误。14077410:SSL例程:SSL23\u获取\u服务器\u你好:sslv3警报hanschakefailure@Ingo:使用最新版本的Indy和OpenSSL,我显示的代码对我来说很好,您提供的URL没有SSL错误,我收到的是HTML。如果您使用的是XE5附带的Indy版本,则应升级Indy版本