【问题标题】:how to make HTTPS calls on the iOS simulator Delphi seattle如何在 iOS 模拟器 Delphi 西雅图上进行 HTTPS 调用
【发布时间】:2015-11-09 17:20:09
【问题描述】:

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 说:'Failed to Load /usr/lib/libcrypto.'

【问题讨论】:

    标签: delphi delphi-10-seattle


    【解决方案1】:

    使用 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,那么这个类也可以。

    【讨论】:

    • 只要你不想abort the request,你可以用这个:o)
    • @SirRufo -- 如果我想终止/中止 HTTP 请求,会有一些问题/问题?
    • @Zam 该链接将引导您查看错误报告
    • 我在 android 上收到 ENETHTTPRequestException , message : client not assigned to request component 错误。
    【解决方案2】:

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

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

    【讨论】:

    • 本周我将重温那篇文章,因为似乎有人在使用 Delphi 10.1 Berlin 时遇到了问题
    • @DaveNottage:很高兴听到这个消息。我期待着阅读它。
    • @DaveNottage ;) 很高兴听到这个消息!
    • 我应该在文章上阅读我自己的cmets;我已经检查过柏林。请注意,我现在已经检查了东京,那里也很好
    • @DaveNottage - 我尝试按照您对 Delphi Tokyo 10.2.1 和 OpenSSL 1.1.0f 的说明进行操作,但脚本失败。它完成了 2 个 buildMac 调用,然后在“复制标头... cp:/tmp/openssl-1.1.0f-i386/include/openssl/*: 没有这样的文件或目录。我检查了 /tmp/openssl-1.1 .0f-i386 文件夹,那里没有包含目录。你能告诉我我可能做错了什么吗?
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多