如何在 iOS 模拟器 Delphi seattle 上进行 HTTPS 调用
how to make HTTPS calls on the iOS simulator Delphi seattle
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);
错误是:'Could Not Load SSL Library'
ShowMessage(IdSSLOpenSSLHeaders.WhichFailedToLoad);
显示空白消息
更新:
添加
IdSSLOpenSSLHeaders.Load;
现在设置路径后会导致 whichFailedToLoad 说:'Failed to Load /usr/lib/libcrypto.'
使用 System.Net.HttpClient.THTTPClient
而不是 Indy 组件。
var
http : THTTPClient;
html : string;
http := THTTPClient.Create;
try
html := http.Get( url ).ContentAsString();
...
finally
http.Free;
end;
它是来自操作系统的 http 函数的包装器。如果 OS 支持 https,那么这个 class 也可以。
您也可以关注这篇精彩的博文 http://delphiworlds.com/2016/03/building-openssl-dylibs-for-ios-simulator/
它对我来说效果很好。我需要它,因为我的 Soap 客户端需要通过 https 连接,而且我不想重写 soap 库。
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);
错误是:'Could Not Load SSL Library'
ShowMessage(IdSSLOpenSSLHeaders.WhichFailedToLoad);
显示空白消息
更新:
添加
IdSSLOpenSSLHeaders.Load;
现在设置路径后会导致 whichFailedToLoad 说:'Failed to Load /usr/lib/libcrypto.'
使用 System.Net.HttpClient.THTTPClient
而不是 Indy 组件。
var
http : THTTPClient;
html : string;
http := THTTPClient.Create;
try
html := http.Get( url ).ContentAsString();
...
finally
http.Free;
end;
它是来自操作系统的 http 函数的包装器。如果 OS 支持 https,那么这个 class 也可以。
您也可以关注这篇精彩的博文 http://delphiworlds.com/2016/03/building-openssl-dylibs-for-ios-simulator/
它对我来说效果很好。我需要它,因为我的 Soap 客户端需要通过 https 连接,而且我不想重写 soap 库。