как совершать HTTPS-вызовы на iOS-симуляторе Delphi Seattle

OpenSSL не работает для симулятора iOS в Delphi DX. Информация по адресу: 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. Тот же URL-адрес работает, когда я использую TWebbrowser.navigate, но, конечно, не с INDY. См. ниже и, возможно, предложите варианты как совершать вызовы HTTPS в симуляторе iOS! Это работало раньше в более ранних версиях 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».


person ThisGuy    schedule 09.11.2015    source источник


Ответы (2)


Используйте 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, то этот класс тоже подойдет.

person Sir Rufo    schedule 09.11.2015
comment
Если вы не хотите отменять запрос, вы можете сделать следующее: о) - person Sir Rufo; 09.11.2015
comment
@SirRufo - есть некоторые проблемы / проблемы, если я хочу завершить / прервать HTTP-запрос? - person Zam; 10.11.2015
comment
@Zam Ссылка приведет вас к отчету об ошибке - person Sir Rufo; 10.11.2015
comment
я получил ENETHTTPRequestException , message : client not assigned to request component ошибку на Android. - person peiman F.; 16.06.2019

Вы также можете подписаться на этот отличный пост в блоге http://delphiworlds.com/2016/03/building-openssl-dylibs-for-ios-simulator/

Это сработало просто отлично для меня. Мне это было нужно, потому что моему Soap-клиенту нужно подключаться по https, а переписывать мыльные либы я не хотел.

person Sherlock70    schedule 05.04.2016
comment
Я вернусь к этой статье на этой неделе, так как у кого-то, похоже, проблемы с Delphi 10.1 Berlin. - person Dave Nottage; 20.06.2016
comment
@DaveNottage: Приятно это слышать. Я с нетерпением жду возможности прочитать это. - person Sherlock70; 20.06.2016
comment
@DaveNottage ;) Рад это слышать! - person Sherlock70; 11.05.2017
comment
Я должен прочитать свои собственные комментарии к статье; Я уже проверил Берлин. Имейте в виду, я сейчас проверил Токио, и там тоже все в порядке. - person Dave Nottage; 13.05.2017
comment
@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, и там нет каталога include. Не могли бы вы сказать мне, что я могу делать неправильно? - person Rohit; 31.08.2017
comment
@Rohit Вы не делаете ничего плохого; похоже, что-то изменилось в файлах make для OpenSSL, что означает, что файлы, которые скрипт пытается скопировать, изначально отсутствуют. Я пытался изменить скрипт так, чтобы он просто копировал заголовки из извлеченных файлов, однако сборка для версии iOS x86_64 не удалась. Теперь нужно выяснить, почему - person Dave Nottage; 31.08.2017
comment
Спасибо, @DaveNottage. Я пытался скопировать файлы заголовков из tar-экстракта, но это не сработало (как вы также подтвердили). Был бы признателен, если бы вы дали мне знать, если вы разберетесь и решите это. - person Rohit; 31.08.2017
comment
Вам обязательно нужно использовать 1.10f? Я проверил 1.0.2l, и скрипт работает с ним. А пока я посмотрю, смогу ли я найти исправление - person Dave Nottage; 31.08.2017
comment
@Rohit Я думаю, что исправил сценарий на основе форка оригинального сценария, который я нашел. Я разместил новый скрипт здесь: github.com /DelphiWorlds/KastriFree/blob/master/Scripts/. Я еще не тестировал полученные дилибы. Убедитесь, что у вас установлены инструменты командной строки Xcode. - person Dave Nottage; 31.08.2017
comment
@DaveNottage - я не думаю, что мне обязательно нужна 1.1.0f - я просто выбрал ее, так как это была самая последняя стабильная версия. Я попробую ваш пересмотренный сценарий завтра и дам вам знать, как он работает. Спасибо за помощь в этом!!! - person Rohit; 31.08.2017
comment
Давайте продолжим обсуждение в чате. - person Dave Nottage; 01.09.2017