gpt4 book ai didi

delphi - 无法使用 Delphi 打开 Https TSL 页面 - Indy 错误 : SSL23_GET_SERVER_HELLO

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:00 24 4
gpt4 key购买 nike

我想在 Delphi XE5 中使用 Indy 的 TIdHTTP 通过 HTTPS 读取 HTML 页面。

ssleay32.dlllibeay32.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 或更高版本,以及 SNI 等 TLS 扩展。因此请考虑在 TIdSSLIOHandlerSocketOpenSSL.SSLOptions 中启用 sslvTLSv1_1sslvTLSv1_2。 SSLVersions 属性,除了默认的 sslvTLSv1。并确保您使用的是最新版本的 Indy 和 OpenSSL DLL 以支持这些版本。

您还应该将代码包装在 try..finally 中,这样即使 Get( ) 引发异常。

试试这个:

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 - 无法使用 Delphi 打开 Https TSL 页面 - Indy 错误 : SSL23_GET_SERVER_HELLO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com