Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
Всем привет, возникла проблема 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?

К сообщению приложен файл. Размер - 5Kb
30 окт 19, 09:28    [22005696]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
Василий 2
Member

Откуда:
Сообщений: 802
1. Indy вполне себе живой
2. Версия под D7 никак не отличается от версии под 2007.
3. Можно также попробовать ICS, там есть компоненты для REST
30 окт 19, 09:55    [22005714]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
арт2010,

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


Варианты:
WinInet.dll
WinHTTP.dll
Сборка OpenSSL с ГОСТ-ом, которую получится использовать в Delphi 2007
30 окт 19, 10:03    [22005720]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
арт2010

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


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

Должно помочь
30 окт 19, 10:05    [22005723]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
Ок, всем спасибо за подсказки, попробую
30 окт 19, 10:16    [22005732]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
Продолжение марлезонского балета. Из клиентов остановился на 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;
6 ноя 19, 17:02    [22010941]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1604
Если приходит 500. Смотртте логи на сервере.
6 ноя 19, 19:06    [22011051]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
Как я их могу посмотреть, они ж на сервере
6 ноя 19, 19:49    [22011073]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
арт2010
Как я их могу посмотреть, они ж на сервере


Да не приходит у тебя 500, успокойся, смотри на уровень ниже, от сокета... код и текст ошибку)
ну или попробуй в IE открыть
6 ноя 19, 20:15    [22011078]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
арт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)
6 ноя 19, 20:20    [22011080]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
арт2010
Продолжение марлезонского балета. Из клиентов остановился на synapse (с остальным - Indy, Delphi Rest Api и прочее - не срослось), вроде наладил работу с http, но с https возникла затычка Выдает внутреннюю ошибку сервера (500), в result получаю целиком body, которое отправляю в ЧЗ Как думаете, в чем может быть загвоздка?


Напомни мне еще раз, по https у ЧЗ - ГОСТ?
Если Да - то почему игнорируешь сообщение выше про WinInet и остановился на synapse?
Или можешь из synapse работать с ГОСТ-ом?
Для "самопроверки" - https://cpca.cryptopro.ru/
synapse - Sock [10061 : Connection refused]
6 ноя 19, 20:48    [22011090]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
sql2012, не игнорю, Delphi Rest Client API (DRCA) вообще не работает у меня, точнее выдает ошибку 400, даже с обычным http
Как не пинал его с разными опциями (restclient.ConnectionType := hctWinINet, verifecert = и true, и false), не взлетает (см. скрин)
По нему еще примеров нифига нет, а по демкам не разобраться.
Значит synapse вообще получается не катит? Блин да что за засада то! Остается получается разбираться в DRCA либо с Indy мучаться?
Indy 10.6 у меня тоже не работает даже с простым http, synapse единственный, кто хотя бы в http работает
Может подскажете что с DRCA у меня не так? Так настроек то вообще хрен да маленько, непонятно даже как header добавить, не понимаю, почему не работает
  vPerson : TPerson;
  vAuth: TAuth;
begin
  //vPerson := TPerson.NewFrom(123, 'Fabricio', 'fabricio.colombo.mva@gmail.com');
  vAuth:=TAuth.NewAuth('9199fe04-42c3-4e81-83b5-120eb5f129f2', '01db16f2-9a4e-4d9f-b5e8-c68f12566fd5', '6d30ff5df90437f98c443317f0beda9cdf626117', 'SIGNED_CODE');
  RestClient1.Resource('http://api.stage.mdlp.crpt.ru/api/v1/auth')
             .Accept(RestUtils.MediaType_Json)
             .ContentType(RestUtils.MediaType_Json)
//          .Post(vPerson);
             .Post(vAuth);
  ShowMessage(Inttostr(RestClient1.ResponseCode));


TAuth мой класс по аналогии с его TPerson

  type
 {$METHODINFO ON}
  TPerson = class(TObject)
 {$METHODINFO OFF}
   public
    id: Integer;
    name: String;
    email: String;
    createDate: TDateTime;
    class function NewFrom(Id: Integer; Name, EMail: String): TPerson;
  end;

type
 {$METHODINFO ON}
  TAuth = class(TObject)
   {$METHODINFO OFF}
 public
    client_secret: String;
    client_id: String;
    user_id: String;
    auth_type: String;
  class function NewAuth(client_secret, client_id, user_id, auth_type: String): TAuth;
  end;

implementation

{ TPerson }

class function TPerson.NewFrom(Id: Integer; Name, EMail: String): TPerson;
begin
  Result := TPerson.Create;
  Result.Id := Id;
  Result.Name := Name;
  Result.EMail := EMail;
end;

class function TAuth.NewAuth(client_secret, client_id, user_id, auth_type: String): TAuth;
begin
  Result := TAuth.Create;
  Result.client_secret := client_secret;
  Result.client_id := client_id;
  Result.user_id := user_id;
  Result.auth_type := auth_type;
end;


К сообщению приложен файл. Размер - 14Kb


Сообщение было отредактировано: 6 ноя 19, 21:59
6 ноя 19, 21:52    [22011101]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
арт2010,

400 - Bad Request (Неправильный запрос).
Сниффер в руки и смотри, что он отправляет, сверяй с тем, что тебе предоставили в другой ветке для примера.

Indy...? Что использует для https, опять те же dll, что и synapse?

WinInet\WinHTTP - через них путь для TLS с ГОСТ.
6 ноя 19, 22:13    [22011105]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
sql2012, спасибо за помощь! буду пытаться
6 ноя 19, 22:14    [22011106]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 307
Я через WinhttpRequest подключился к МДЛП, идет на ура.
7 ноя 19, 02:23    [22011167]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
арт2010
Member

Откуда:
Сообщений: 343
V.Borzov, можете пример кода привести?
7 ноя 19, 08:38    [22011191]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
Василий 2
Member

Откуда:
Сообщений: 802
В самом крайнем случае можно сетевой обмен реализовать через DLL, в которую запихнуть либо http клиент из новых версий (основан на WinHTTP), либо вообще подключить curl.
Но вообще WinInet в плане http запросов очень простой, буквально одна функция для простого get.
7 ноя 19, 09:46    [22011234]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
MikeDD
Member

Откуда:
Сообщений: 253
А в совсем крайних случаях говорят помогает пустить шифрованный трафик через stunnel: https://www.cryptopro.ru/products/other/stunnel-msspi
7 ноя 19, 10:52    [22011311]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 307
арт2010
V.Borzov, можете пример кода привести?

Вот пример в фастскрипте (авторизация пройдена, токен уже получен):

+
  WinHttp := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  try 
      WinHttp.Open('POST','https://api.sb.mdlp.crpt.ru/api/v1/documents/outcome',0);
      WinHttp.setRequestHeader('Content-type', 'application/json');
      WinHttp.setRequestHeader('Cache-Control','no-cache');
      WinHttp.setRequestHeader('Accept-Language','ru');
      WinHttp.setRequestHeader('Authorization', 'token '+token);
      WinHttp.Send('{"filter":{},"start_from":0,"count":100'+'}'); 
      if WinHttp.Status <> 200 then RaiseException('outcome: status: '+vartostr(winhttp.status)+',text: '+vartostr(winhttp.statustext));
      strvalue := WinHttp.ResponseText();                   
  finally
    WinHTTP := unassigned;
  end;

Перед этим было получение токена: обращение по http (можно и в synapse даже это сделать), получение кода для подписание, потом само подписания, отправка кода и получение токена. Дальше идет подключение по https, приведённое в примере.
Я тоже воткнулся в ошибку 500 в synapse и отложил пока это всё, заинтересовавшись Winhttp, которому и OpenSSL не потребовался.

Для получения запросов рекомендую всё-таки обращаться не к WinHttp.ResponseText, ибо он взбрыкнёт с кодировкой рано или поздно, а использовать WinHTTP.ResponseStream.
7 ноя 19, 12:13    [22011390]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
yooo
Member

Откуда:
Сообщений: 49
Попробуйте в файрфокс поставить расширение RESTClient и отсылать запрос через него, заодно и полные ответы сервера увидите. Мне не так давно сильно помогло. После этого использовал indy для d7.
7 ноя 19, 13:00    [22011447]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
yooo
Попробуйте в файрфокс поставить расширение RESTClient и отсылать запрос через него, заодно и полные ответы сервера увидите. Мне не так давно сильно помогло. После этого использовал indy для d7.


и работать по http?
а если https по гост?

как-то странно, всё обходят стороной..
Или Я ошибаюсь и там нет никакого ГОСТ-а в TLS, на продуктивном сервере?


p.s. // не имею никакого отношения к ЧЗ, просто глянул описания и на форумах - ссылки на API - а там https по ГОСТ
7 ноя 19, 14:08    [22011517]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
V.Borzov

Я тоже воткнулся в ошибку 500 в synapse и отложил пока это всё, заинтересовавшись Winhttp, которому и OpenSSL не потребовался.


написан он так... когда со своими сервисами словил - выяснил, что никуда запрос и не уходил и сервис не давал 500 код...
нужно на сокетную ошибку еще смотреть - пример приводил выше.
7 ноя 19, 14:16    [22011528]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 307
sql2012

написан он так... когда со своими сервисами словил - выяснил, что никуда запрос и не уходил и сервис не давал 500 код...

Было ещё наблюдение какой-то проблемы с "Authorization token ТОКЕН", но дальше не полез, забросил. То есть synapse там что-то пытался подменить своими данными.

Сообщение было отредактировано: 7 ноя 19, 14:26
7 ноя 19, 14:23    [22011536]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 845
sql2012
Или можешь из synapse работать с ГОСТ-ом?
подружить synapse с ГОСТ возможно ?
7 ноя 19, 15:47    [22011632]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Rest Client + SSL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 709
Ghost Writer
sql2012
Или можешь из synapse работать с ГОСТ-ом?
подружить synapse с ГОСТ возможно ?


если внутри dll будет вызов СКЗИ с ГОСТ - да
7 ноя 19, 17:21    [22011711]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Delphi Ответить