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

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

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

В общем буду рад советам и благодарен за помощь.
...
Рейтинг: 0 / 0
метод ibec_http_post для https
    #39675950
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если дашь простой скрипт, который будет куда-то там лезть по https и что-то делать, то я как минимум посмотрю, что можно сделать.
...
Рейтинг: 0 / 0
метод ibec_http_post для https
    #39678649
nofate2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
метод ibec_http_post для https
    #39678650
nofate2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert ,
прошу прощения - проглядел лишнюю строчку в коде скрипта (строка №30):
Код: plsql
1.
  xml    = ibec_LoadFromFile('C:\xml_pack_test.xml');


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

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


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