Can't open Https TSL page with Delphi - Indy Error : SSL23_GET_SERVER_HELLO
Can't open Https TSL page with Delphi - Indy Error : SSL23_GET_SERVER_HELLO
我想在 Delphi XE5 中使用 Indy 的 TIdHTTP
通过 HTTPS 读取 HTML 页面。
ssleay32.dll
和 libeay32.dll
在主程序文件夹中。
我收到一个错误:SSL23_GET_SERVER_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 错误是非常不寻常的。
许多现代网络服务器现在需要 TLS 1.1 或更高版本,TLS 扩展如 SNI 等。因此请考虑在 TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions
属性 中启用 sslvTLSv1_1
和 sslvTLSv1_2
,除了默认的 sslvTLSv1
。并确保您使用的是最新版本的 Indy 和 OpenSSL DLL 以支持这些版本。
您还应该将代码包装在 try..finally
中,这样即使 Get()
引发异常,您也可以 Free
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 之后,代码运行良好,没有任何错误。
感谢雷米的支持
我想在 Delphi XE5 中使用 Indy 的 TIdHTTP
通过 HTTPS 读取 HTML 页面。
ssleay32.dll
和 libeay32.dll
在主程序文件夹中。
我收到一个错误:SSL23_GET_SERVER_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 错误是非常不寻常的。
许多现代网络服务器现在需要 TLS 1.1 或更高版本,TLS 扩展如 SNI 等。因此请考虑在 TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions
属性 中启用 sslvTLSv1_1
和 sslvTLSv1_2
,除了默认的 sslvTLSv1
。并确保您使用的是最新版本的 Indy 和 OpenSSL DLL 以支持这些版本。
您还应该将代码包装在 try..finally
中,这样即使 Get()
引发异常,您也可以 Free
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 之后,代码运行良好,没有任何错误。 感谢雷米的支持