OSX上的Delphi FMX和Indy返回套接字错误,但在PC上不返回

OSX上的Delphi FMX和Indy返回套接字错误,但在PC上不返回,delphi,firemonkey,indy,Delphi,Firemonkey,Indy,当我以Windows为目标编译下面的代码时,它会很好地加载站点,为OSX 10.12.x编译,结果返回一个套接字错误#54。在OSX 10.13 High Sierra上,同样的代码可以正常工作。 经过几天的努力,我就是想不出来 有人能给我一些线索吗 我使用的是Delphi10.2 Tokyo id:=TIdHTTP.Create(nil); ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(id); id.IOHandler:=ssl; id.HTTPOptio

当我以Windows为目标编译下面的代码时,它会很好地加载站点,为OSX 10.12.x编译,结果返回一个套接字错误#54。在OSX 10.13 High Sierra上,同样的代码可以正常工作。 经过几天的努力,我就是想不出来

有人能给我一些线索吗

我使用的是Delphi10.2 Tokyo

id:=TIdHTTP.Create(nil);
ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(id);
id.IOHandler:=ssl;
id.HTTPOptions:=[hoWantProtocolErrorContent,hoNoProtocolErrorException];
id.RedirectMaximum:=5;
id.ReadTimeout:=30000;
id.HandleRedirects:=true;

ssl.SSLOptions.SSLVersions:=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv2,sslvSSLv23,sslvSSLv3];

s:=id.Get('https://www.fleurtygirl.net/');

ssl.Free;
id.free;

首先,远离
sslvSSLv2
sslvSSLv3
,因为它们不安全,没有人再使用它们。您也不应该在
SSLVersions
属性中使用
sslv23
。仅使用
sslvTLSv1
及更高版本。也就是说,错误54是“由对等方重置连接”,这意味着服务器在其端强制关闭连接。也许它不喜欢您的SSL/TLS握手。也许这只是10.12中的一个bug(因为它在10.13中工作)。谁知道呢。如果没有导致套接字错误的堆栈跟踪,以及原始TCP通信的跟踪,就真的没有办法回答这个问题。它仍然是一样的。我通过brew安装了openssl,在执行openssl版本时,它显示了2018年8月14日的1.0.2p,但delphi继续加载libssl.0.9.8。dylibIndy在运行时动态加载openssl,尝试加载多个不同的文件名,直到找到匹配。如果你想使用的动态库文件不在应用程序的文件夹中,你可以在应用程序启动时使用
IdOpenSSLSetLibPath()
函数告诉Indy它们的位置。我将库编译为32位,它生成了libssl.1.0.0.dylib和libcrypto.1.0.0.dylib。我将它们复制到/Contents/MacOS中,在那里我还找到了其他lib,但它仍然无法加载它们。然后,我将它们重命名为libssl.dylib和libcrypto.dylib,再次是nothing。我无法让它加载libs。然后我将它们复制到我的用户文件夹中,并使用IdOpenSSLSetLibPath()设置路径,同样,它们不会被加载。我还尝试通过LoadLibrary手动加载它们,只有libcrypto.1.0.0.dylib可以加载,libssl.1.0.0.dylib也会在加载LoadLibrary时失败,我不知道为什么。由于这个openssl的问题,我的项目在macOS 10.12及以下版本中不再都能正常工作。