3

OpenSSL 不适用于 Delphi DX 中的 iOS 模拟器 使用信息位于: http ://blog.marcocantu.com/blog/using_ssl_delphi_ios.html http://docwiki.embarcadero.com/RADStudio/Seattle/en/OpenSSL https://plus .google.com/100777187605111792758/posts/SPnHdXvTTNu

我可以让它在设备上工作,但不能在 iOS 模拟器上工作。当我使用 TWebbrowser.navigate 时,相同的 URL 有效,但当然不适用于 INDY。请参见下文,并可能提供有关如何在 iOS 模拟器上进行 HTTPS 调用的建议!这在 Rad Studio 的早期版本(XE4、XE5)之前有效,但如果我的记忆对我有用的话,自 XE7 以来就没有。

我的 usr/lib 文件夹中有这些文件:

libcrypto.0.9.8.dylib
libssl.0.9.8.dylib

这是我的用途

uses
  IdSSLOpenSSL,
  {$IF Defined(IOS) and Defined(CPUARM)}
    IdSSLOpenSSLHeaders_Static,
  {$ELSE}
    IdSSLOpenSSLHeaders,
  {$ENDIF}
...

这是我的主表单的 onCreate

procedure TmLoginForm.FormCreate(Sender: TObject);
var
  t:string;
begin
  IdOpenSSLSetLibPath('/usr/lib/');
...

这是我使用的函数的一部分,在最后一行抛出异常

function ParseGroups(OnlyUserCreated:boolean):integer;
var
  IdHTTP          :TIdHTTP;
  HTML            :String;
  JSON_Groups     :TJSONObject;
  Group           :uGroup;
begin
  result:=0;
  HTML:='';
  IdHTTP:=TIdHTTP.Create(nil);
  IdHTTP.HandleRedirects:=false;
  try
    HTML:=IdHTTP.Get(URL_Host+ACCESSTOKEN);

错误是:“无法加载 SSL 库”

ShowMessage(IdSSLOpenSSLHeaders.WhichFailedToLoad);显示一条空白消息

更新:

添加

 IdSSLOpenSSLHeaders.Load;

设置路径后,现在会导致 whichFailedToLoad 说:“加载 /usr/lib/libcrypto 失败。”

4

2 回答 2

4

使用System.Net.HttpClient.THTTPClient而不是 Indy 组件。

var
  http : THTTPClient;
  html : string;

http := THTTPClient.Create;
try
  html := http.Get( url ).ContentAsString();
  ...
finally
  http.Free;
end;

它是来自操作系统的 http 函数的包装器。如果操作系统支持 https,那么这个类也可以。

于 2015-11-09T18:10:30.510 回答
2

您也可以关注这篇漂亮的博文http://delphiworlds.com/2016/03/building-openssl-dylibs-for-ios-simulator/

它对我来说很好。我需要它,因为我的 Soap 客户端需要通过 https 连接,而且我不想重写 soap 库。

于 2016-04-05T13:07:32.060 回答