Delphi Rest Client + SSL

арт2010
Дата: 30.10.2019 09:28:11
Всем привет, возникла проблема c сабжем. Предыстория тут https://www.sql.ru/forum/1309610-4/markirovka-lekarstvennyh-sredstv

Delphi Rest Client оказываетеся доступен только с поздних версий, что вызывает сильную проблему, так как проект у меня в Delphi 2007 и там установлена куча компонентов начала 2000-х, которые под эту IDE то еле нашел в свое время, когда восстанавливал этот проект. А под новые версии их точно нет. Так что теперь возникла такая вот дилемма:
1. Оставаться на Delphi 2007 и:
1.1. Пробовать решить через стандартные Indy (обновил до 10.5.5) или
1.2. Скачать какой то сторонний Delphi Rest под эту версию
Первое пробовал вчера целый день, решал кучу проблем, в конце концов вылазит окно как на скрине
Покапавшись в этой теме (почему то окрывается только в кэше гугла), не могу побороть

https://webcache.googleusercontent.com/search?q=cache:w2bwm1DGfHIJ:https://www.sql.ru/forum/1270559/indy-ssl-ne-ponimaet-ecdhe-ecdsa-x25519 &cd=2&hl=ru&ct=clnk&gl=ru

https://webcache.googleusercontent.com/search?q=cache:5DqhlC3n15kJ:https://www.sql.ru/forum/1270559-2/indy-ssl-ne-ponimaet-ecdhe-ecdsa-x25519 &cd=1&hl=ru&ct=clnk&gl=ru

Похоже нерешаемая проблема и даже самые последние перед смертью версии Indy не могут работать с последними версиями SSL?

Со сторонним Rest Clientтоже не срослось. Нашел вот такой
https://github.com/fabriciocolombo/delphi-rest-client-api
Но как назло у него нет версии под D2007, только D7 или D2010

2. Полностью апгрейдиться до версий Delphi, где есть встроенный Delphi Rest Client. Правда придется не только кучу компонентов устанавливать но и как то решать вопрос с теми, которые уже не могут быть установлены, то есть править придется очень много

Какой путь посоветуете выбрать? По уму бы № 2, но боюсь, что увязну в портации проекта и на саму маркировку тупо не хватит времени. Если 1.1, то похоже путь в никуда, стандартными indy это не решить?
Остается небольшая надежда на 1.2 - может есть какая то возможность установить dpk для D7 или D2010 в D2007? У меня не получилось. Или еще какой-нибудь сторонний Delphi Rest Client, который можно поставить на Delphi 2007?
Василий 2
Дата: 30.10.2019 09:55:34
1. Indy вполне себе живой
2. Версия под D7 никак не отличается от версии под 2007.
3. Можно также попробовать ICS, там есть компоненты для REST
sql2012
Дата: 30.10.2019 10:03:36
арт2010,

у сервера https://api.sb.mdlp.crpt.ru/ - GOST R 34.10-2012 512,
сертификат выдан тестовым УЦ.


Варианты:
WinInet.dll
WinHTTP.dll
Сборка OpenSSL с ГОСТ-ом, которую получится использовать в Delphi 2007
sql2012
Дата: 30.10.2019 10:05:54
арт2010

Со сторонним Rest Clientтоже не срослось. Нашел вот такой
https://github.com/fabriciocolombo/delphi-rest-client-api
Но как назло у него нет версии под D2007, только D7 или D2010


в описании вижу:
restclient.ConnectionType := hctWinINet;

Должно помочь
арт2010
Дата: 30.10.2019 10:16:06
Ок, всем спасибо за подсказки, попробую
арт2010
Дата: 06.11.2019 17:02:31
Продолжение марлезонского балета. Из клиентов остановился на synapse (с остальным - Indy, Delphi Rest Api и прочее - не срослось), вроде наладил работу с http, но с https возникла затычка Выдает внутреннюю ошибку сервера (500), в result получаю целиком body, которое отправляю в ЧЗ Как думаете, в чем может быть загвоздка? Код:
var
  AURL, APOSTData: string;
  APOSTData2: TStringList;
  httpsend: THTTPSend;
  stream:tstringstream;
  result:TStringList;
begin
  AURL := 'https://api.stage.mdlp.crpt.ru/api/v1/documents/send';
  APOSTData2 := TStringList.create;
  APOSTData2.LoadFromFile('C:\doc.txt');
  stream:=TStringStream.Create('');
  APOSTData2.SaveToStream(stream);

  httpsend:=THTTPSend.Create;
  httpsend.MimeType:='application/json';
  httpsend.Headers.Add('Authorization: token 5607d0e8-c76c-4f0a-a6e7-f30f03f26e7b');
  httpsend.Document.LoadFromStream(stream);

  try
    httpsend.HTTPMethod('post', AURL);
    result := TStringList.Create;
    result.LoadFromStream(httpsend.Document);
  finally
    showmessage(inttostr(httpsend.ResultCode));
    result.SaveToFile('C:\mark2.txt');
  end;
X-Cite
Дата: 06.11.2019 19:06:22
Если приходит 500. Смотртте логи на сервере.
арт2010
Дата: 06.11.2019 19:49:28
Как я их могу посмотреть, они ж на сервере
sql2012
Дата: 06.11.2019 20:15:46
арт2010
Как я их могу посмотреть, они ж на сервере


Да не приходит у тебя 500, успокойся, смотри на уровень ниже, от сокета... код и текст ошибку)
ну или попробуй в IE открыть
sql2012
Дата: 06.11.2019 20:20:37
арт2010
Продолжение марлезонского балета. Из клиентов остановился на synapse (с остальным - Indy, Delphi Rest Api и прочее - не срослось), вроде наладил работу с http, но с https возникла затычка Выдает внутреннюю ошибку сервера (500), в result получаю целиком body, которое отправляю в ЧЗ Как думаете, в чем может быть загвоздка? Код:
var
  AURL, APOSTData: string;
  APOSTData2: TStringList;
  httpsend: THTTPSend;
  stream:tstringstream;
  result:TStringList;
begin
  AURL := 'https://api.stage.mdlp.crpt.ru/api/v1/documents/send';
  APOSTData2 := TStringList.create;
  APOSTData2.LoadFromFile('C:\doc.txt');
  stream:=TStringStream.Create('');
  APOSTData2.SaveToStream(stream);

  httpsend:=THTTPSend.Create;
  httpsend.MimeType:='application/json';
  httpsend.Headers.Add('Authorization: token 5607d0e8-c76c-4f0a-a6e7-f30f03f26e7b');
  httpsend.Document.LoadFromStream(stream);

  try
    httpsend.HTTPMethod('post', AURL);
    result := TStringList.Create;
    result.LoadFromStream(httpsend.Document);
  finally
    showmessage(inttostr(httpsend.ResultCode));
    result.SaveToFile('C:\mark2.txt');
  end;


Используй:
httpsend.Sock.LastError и httpsend.Sock.LastErrorDesc


HTTP [500 : нет информации]
Sock [11004 : Valid name, no data record of requested type] = вот что у тебя

+

// от WinHTTP: Не удается разрешить имя или адрес сервера
// от WinInet: Ошибка: 12007 Не удалось определить адрес сервера, проверьте сетевое подключение.(Service Name Not Resolved)