Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / метод ibec_http_post для https / 9 сообщений из 9, страница 1 из 1
18.07.2018, 21:44
    #39675903
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
Добрый день!
Вопрос к уважаемому разработчику.
Возможно просить реализоваться данный метод для работы также по https-протоколу?
Готов финансово простимулировать вопрос.

Дело в том что неделю писал скрипты, тестировал, писал делфийскую обертку с логированием, писал скрипты масштабирования решения на десяток Баз.
Но все писалось для тестового SOAP-сервера. Там смысл отправки xml-пакетов на SOAP-сервер с данными из Базы.
В итоге когда все тесты закончились успешно, заказчик дал url рабочего SOAP-сервера. А это https-хост, а не http, как тестовый!!!
И разумеется весь мой труд оказался бесполезен. А так все было красиво, удобно и изящно!...

Теперь либо пробовать писать свой udf-костыль либо вообще все переделывать.
Либо просить коллег прокидывать post-запросы через какой-то технический шлюз http-https.
Что тоже будет выглядеть как-то не изящно и усложнит аналитику при ошибках с данными в пакетах.

В общем буду рад советам и благодарен за помощь.
...
Рейтинг: 0 / 0
19.07.2018, 03:16
    #39675950
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
Если дашь простой скрипт, который будет куда-то там лезть по https и что-то делать, то я как минимум посмотрю, что можно сделать.
...
Рейтинг: 0 / 0
25.07.2018, 01:35
    #39678649
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
IBExpert ,
прошу прощения что не отвечал - только сегодня вернулся из командировки.
Вот простой скрипт, который выводит три варианта ответа (при выборе одного из трех вариантов URL для подключения):
код скрипта
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
execute ibeblock
as
begin
  /*
      Скрипт тестирования передачи xml-пакета на SOAP-сервер по https-протоколу.
      На SOAP-сервере установлено ограничение времени жизни пакета - 5 мин.
      Поэтому тестовый сервер его не примет, так как время его годности истекло,
      а рабочий отвергнет потому что авторизация по имени пользователя
      и ключу пакета не соответствуют действующим на нем парам login-password.
      Но в любом случае сервер должен будет вернуть краткий ответ в формате xml с указанием на ошибку.
      1-й сервер тестовый работающий по http-протоколу.
      2-й - рабочий, работающий по https-протоколу.
      3-й - адрес http->https шлюза транслирующего пакеты на рабочий сервер по https-протоколу
      и возвращающий его ответы в рамках http-соединения.
      Для теста скрипта и установки соединения с тем или иным сервером необходимо
      раскомментировать соответствующую строчку скрипта где URL = 'URL=.../soap/', а другие - закомментировать.
  */
  ------------------------------------------------------------------------------
  -- 1. URL тестового SOAP-сервера с которым можно устанавливать соединение по http-протоколу:
  -- URL    = 'URL=http://lkreestr.nostroy.anonamis.ru/soap/';
  ------------------------------------------------------------------------------
  -- 2. URL рабочего SOAP-сервера с которым требует устанавливать соединение по https-протоколу:
   URL    = 'URL=https://lkreestr.nostroy.ru/soap/';
  ------------------------------------------------------------------------------
  -- 3. URL https->http шлюза, который ведет передает пакет на фактический адрес
  -- сервера https://lkreestr.nostroy.ru/soap/ по https-протоколу и возвращает его ответ:
  -- URL    = 'URL=http://lkreestr.a-wm.ru/soap/';
  ------------------------------------------------------------------------------
  -- Формируем пустой xml-пакет
  xml    = ibec_LoadFromFile('C:\xml_pack_test.xml');
  xml    =
            '<soap:Envelope  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'||ibec_CRLF||
            '                xmlns:xsd="http://www.w3.org/2001/XMLSchema"'||ibec_CRLF||
            '                xmlns:soap="http://www.w3.org/2003/05/soap-envelope"'||ibec_CRLF||
            '                xmlns:soap1="http://lkreestr.nostroy.anonamis.ru/soap/"'||ibec_CRLF||
            '                xmlns:oas1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">'||ibec_CRLF||
            '    <soap:Header>'||ibec_CRLF||
            '        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">'||ibec_CRLF||
            '            <wsse:UsernameToken wsu:Id="UsernameToken-75855DDDE5C6F6DC9A14939136016553">'||ibec_CRLF||
            '                <wsse:Username>operator_010</wsse:Username>'||ibec_CRLF||
            '                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">18162Ad/sRD9/m6Fn3Sm1bYizYU=</wsse:Password>'||ibec_CRLF||
            '                <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">SnRPL1ovU1FtWHgrQ2pxMw==</wsse:Nonce>'||ibec_CRLF||
            '                <wsu:Created>2018-07-25T00:10:36+03:00</wsu:Created>'||ibec_CRLF||
            '            </wsse:UsernameToken>'||ibec_CRLF||
            '        </wsse:Security>'||ibec_CRLF||
            '    </soap:Header>'||ibec_CRLF||
            '    <soap:Body>'||ibec_CRLF||
            '        <soap1:memberCreateOrUpdate soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">'||ibec_CRLF||
            '        <data xsi:type="soap:data" xmlns:soap="http://lkreestr.nostroy.anonamis.ru/soap/"/>'||ibec_CRLF||
            '        <ul xsi:type="soap:ul" xmlns:soap="http://lkreestr.nostroy.anonamis.ru/soap/"/>'||ibec_CRLF||
            '        <ip xsi:type="soap:ip" xmlns:soap="http://lkreestr.nostroy.anonamis.ru/soap/"/>'||ibec_CRLF||
            '        <rights xsi:type="soap:rights" xmlns:soap="http://lkreestr.nostroy.anonamis.ru/soap/"/>'||ibec_CRLF||
            '        <soap:right_suspensions xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>'||ibec_CRLF||
            '        <soap:insurances xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>'||ibec_CRLF||
            '        <soap:checks xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>'||ibec_CRLF||
            '        </soap1:memberCreateOrUpdate>'||ibec_CRLF||
            '    </soap:Body>'||ibec_CRLF||
            '</soap:Envelope>';
  xml = ibec_AnsiStringToUTF8( :xml );
  ------------------------------------------------------------------------------
  -----  Пробуем соединиться с сервером и отправить пакет методом POST
  try
      -- устанавливаем соединение с сервером
      HTTP = ibec_http_OpenSession( :URL );

      try
        -- пробуем передать пакет
        ibec_http_Post( :HTTP, :xml );
      except
        -- читаем код статуса http-соединения:
        SCode = ibec_http_StatusCode( :HTTP );
        -- выводим сообщение об ошибке:
        ibec_ShowMessage( ibec_Format('Системный сбой при передаче xml-пакета на SOAP-Сервер!'||ibec_CRLF ||ibec_CRLF ||
                                      'Тип сбоя: "%s"'||ibec_CRLF ||ibec_CRLF ||
                                      'Сообщение сервера об ошибке:'||ibec_CRLF ||'%s'||'%s'
                                      ,ibec_err_Name, ibec_err_Message,
                                      ibec_IIF(
                                       ( SCode = 500 ) and (ibec_err_Message = 'Internal Service Error'),
                                        ibec_CRLF ||ibec_CRLF || 'Подсказка: '||ibec_CRLF || 'Возможно нарушена струкутра пакета или SOAP-сервер '||
                                                                                             'изменил схему данных!',
                                        '')));
      end
      -- читаем код статуса http-соединения
      SCode         = ibec_http_StatusCode( :HTTP );

      if ( SCode = 200 ) then
        begin
             -- если код статуса соединения =200 - значит соединение успешно установлено
             -- и соответственно ответ сервера не будет пустым, сохраняем его в переменную SOAP_Response:
             SOAP_Response = ibec_http_Data(HTTP);
             SOAP_Response = ibec_UTF8ToAnsiString(:SOAP_Response);
        end
        else -- соедиенение с сервером не было установлено:
            SOAP_Response = 'не удалось соединиться с SOAP-сервером';

  finally
        if ( HTTP <> 0 )
            then ibec_http_CloseSession( HTTP );
  end;

      -- выводим результат теста:
      ibec_ShowMessage( ibec_Coalesce(:SOAP_Response,'<сбой при получении ответа от SOAP-сервера>') );
end




1. Так выглядит ответ при соединении с тестовым сервером по http-протоколу:


2. Так при попытке соединения с рабочим https-сервером:


3. А так при соединении с рабочим https-сервером через http-https шлюз:


В общем нужно добиться чтобы при обращении по URL варианта 2 ответ был один в один такой же как и при обращении по варианту 3.
...
Рейтинг: 0 / 0
25.07.2018, 01:49
    #39678650
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
IBExpert ,
прошу прощения - проглядел лишнюю строчку в коде скрипта (строка №30):
Код: plsql
1.
  xml    = ibec_LoadFromFile('C:\xml_pack_test.xml');


- её нужно удалить или закомментировать.

Прикрепляю файл с полным текстом исправленного скрипта.
Так же его можно скачать по ссылке: https_test.sql
...
Рейтинг: 0 / 0
25.07.2018, 07:41
    #39678682
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
Ну, в общем, понятно. Раньше конца следующей недели результатов ждать не стоит.
...
Рейтинг: 0 / 0
25.07.2018, 08:25
    #39678699
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
IBExpert ,
да я вообще, в глубине души, как-то и не надеялся на ваш ответ!
Поэтому пока прокинул все через шлюз.
Но все равно буду рад, если появится возможность слать пакеты напрямую!
И как и обещал - буду благодарен, если укажите реквизиты для доната )
...
Рейтинг: 0 / 0
06.08.2018, 09:08
    #39683568
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
Попробуй:
www.ibexpert.com/rus/ibe_sfx_https.exe
Пока выложил отдельно.
Необходимые библиотеки OpenSSL в архиве.
...
Рейтинг: 0 / 0
06.08.2018, 12:18
    #39683649
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
IBExpert,
огромное спасибо!!!
Но попробовать смогу только после 28 августа, так как уже в отпуске.
...
Рейтинг: 0 / 0
04.09.2018, 00:30
    #39697456
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод ibec_http_post для https
IBExpert,
проверил.
Всё работает.
Большое спасибо!
С меня покупка "Support standard hotline 60 minutes" в качестве доната)
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / метод ibec_http_post для https / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]