Подключение к веб-сервисам ЦБ РФ.
Модератор: Модераторы
Подключение к веб-сервисам ЦБ РФ.
Добрый день.
Не знаю получу ли я ответ или нет (судя по последней активности), но потребовалось научиться подключаться к веб-сервисам ЦБ РФ. У них на сайте есть описание всех сервисов, которые возвращают значения не в DataSet а в XML. Т.е. веб-сервисы заказнчиваются на XML. Собственно пытаюсь это сделать с помощью Synapse HTTPSEND. Однако не получается.
Формирую MimeType и задаю все данные по серверу. А в итоге ловлю при коннекте ошибку 403.
И еще один момент, меня сильно смущает, что заголовок у запросов для всех веб-сервисов ЦБ РФ выглядит таким образом:
POST /DailyInfoWebServ/DailyInfo.asmx HTTP/1.1
Host: www.cbr.ru
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://web.cbr.ru/GetCursDynamicXML"
При этом, сам заголовок веб-сервиса я не могу сформировать (т.е. заголовок формируется исключительно Synapce). Собственно куда копать или как можно подключиться к веб-сервисам ЦБ РФ? Если вдруг кто-то копал или уже сталкивался с этим и знает как быть, отпишитесь пжл. А то я уже 3 день голову ломаю и ищу в нете, но ничего не могу найти.
Не знаю получу ли я ответ или нет (судя по последней активности), но потребовалось научиться подключаться к веб-сервисам ЦБ РФ. У них на сайте есть описание всех сервисов, которые возвращают значения не в DataSet а в XML. Т.е. веб-сервисы заказнчиваются на XML. Собственно пытаюсь это сделать с помощью Synapse HTTPSEND. Однако не получается.
Формирую MimeType и задаю все данные по серверу. А в итоге ловлю при коннекте ошибку 403.
И еще один момент, меня сильно смущает, что заголовок у запросов для всех веб-сервисов ЦБ РФ выглядит таким образом:
POST /DailyInfoWebServ/DailyInfo.asmx HTTP/1.1
Host: www.cbr.ru
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://web.cbr.ru/GetCursDynamicXML"
При этом, сам заголовок веб-сервиса я не могу сформировать (т.е. заголовок формируется исключительно Synapce). Собственно куда копать или как можно подключиться к веб-сервисам ЦБ РФ? Если вдруг кто-то копал или уже сталкивался с этим и знает как быть, отпишитесь пжл. А то я уже 3 день голову ломаю и ищу в нете, но ничего не могу найти.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Я подключался к веб-сервису ЦБ РФ. Вот, кстати, готовый модуль для парсинга курса валют viewtopic.php?f=6&t=43301 https://github.com/Al-Muhandis/CurrencyRates . Но там все просто. Никакого тебе "супа"
Ichthyander
Посмотрел. Как я понял вы подключались с помощью JSON? Для меня пока этот момент не очень. Я сейчас бьюсь с подключением по SOAP посредством SYNAPCE (использую класс THTTPSEND).
Собственно пока пост был на модерации, я немного продвинулся дальше, но не сильно. Собственно за несколько дней ковыряния созрели следующие вопросы:
1) Не получается прочитать ответ, который приходит в Document с помощью метода Read. Т.е. как бы я не пытался куда либо прочитать поток данных, обращение потом к этому буферу вызывает ошибку доступа к памяти. В итоге получилось обращаться к буферу напрямую через свойство Memory. Почему через Read не получается прочитать? Можете показать правильную конструкцию написания?
2) Формирую запрос с телом согласно правилам, которые указаны на сайте ЦБ РФ в разделе технического описания. Т.е. заголовок и тело корректные (во всяком случае то, что я вижу визуально). Однако при получении пакета, в ответ приходит ошибка 415. Сам же ответ выглядит таким образом: The server cannot service the request because the media type is unsupported. Собственно не могу понять, что не так...
Пример моего запроса:
Единственная разница в том, что у меня отсутствует табуляция. Все остальное один в один как на сайте ЦБ РФ в разделе примера по данной веб-функции.
3) Не совсем понятно, какие значения реально надо указывать в таких свойствах, как: TargetHost, Protokol если в методе HTTPMethod явно указывается протокол и адрес, по которому нужно законнектиться Т.е. каким образом одно связано с другим? В итоге я первые два свойства в принципе не заполняю, так как я не вижу как они влияют на заголовок моего запроса, когда я их указываю.
4) Как вообще увидеть реальный текст запроса, который уходит по адресу? Возможно то, что я костылями отображаю, совсем не совпадает с тем, что реально уходит...
5) Есть какие то другие компоненты, которые позволили бы в принципе общаться с ЦБ РФ по SOAP протоколу (меня интересуют веб-функции, которые работают с форматом XML).
Можете помочь? Или кто-то может помочь разобраться в этом?
Посмотрел. Как я понял вы подключались с помощью JSON? Для меня пока этот момент не очень. Я сейчас бьюсь с подключением по SOAP посредством SYNAPCE (использую класс THTTPSEND).
Собственно пока пост был на модерации, я немного продвинулся дальше, но не сильно. Собственно за несколько дней ковыряния созрели следующие вопросы:
1) Не получается прочитать ответ, который приходит в Document с помощью метода Read. Т.е. как бы я не пытался куда либо прочитать поток данных, обращение потом к этому буферу вызывает ошибку доступа к памяти. В итоге получилось обращаться к буферу напрямую через свойство Memory. Почему через Read не получается прочитать? Можете показать правильную конструкцию написания?
2) Формирую запрос с телом согласно правилам, которые указаны на сайте ЦБ РФ в разделе технического описания. Т.е. заголовок и тело корректные (во всяком случае то, что я вижу визуально). Однако при получении пакета, в ответ приходит ошибка 415. Сам же ответ выглядит таким образом: The server cannot service the request because the media type is unsupported. Собственно не могу понять, что не так...
Пример моего запроса:
Код: Выделить всё
POST /DailyInfoWebServ/DailyInfo.asmx HTTP/1.1
Host: www.cbr.ru
Content-Type: text/xml; charset=utf-8
Content-Length: 364
SOAPAction: "http://web.cbr.ru/GetCursOnDateXML"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetCursOnDateXML xmlns="http://web.cbr.ru/">
<On_date>17.03.2022 21:48:13</On_date>
</GetCursOnDateXML>
</soap:Body>
</soap:Envelope>
Единственная разница в том, что у меня отсутствует табуляция. Все остальное один в один как на сайте ЦБ РФ в разделе примера по данной веб-функции.
3) Не совсем понятно, какие значения реально надо указывать в таких свойствах, как: TargetHost, Protokol если в методе HTTPMethod явно указывается протокол и адрес, по которому нужно законнектиться Т.е. каким образом одно связано с другим? В итоге я первые два свойства в принципе не заполняю, так как я не вижу как они влияют на заголовок моего запроса, когда я их указываю.
4) Как вообще увидеть реальный текст запроса, который уходит по адресу? Возможно то, что я костылями отображаю, совсем не совпадает с тем, что реально уходит...
5) Есть какие то другие компоненты, которые позволили бы в принципе общаться с ЦБ РФ по SOAP протоколу (меня интересуют веб-функции, которые работают с форматом XML).
Можете помочь? Или кто-то может помочь разобраться в этом?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
К слову, JSON, проще, быстрее, популярнее в последние годы, поэтому почему бы и нет. SOAP - устаревший громоздкий протокол, которые все реже где используется.
Зачем использовать SYNAPSE, если все это есть в нативном fphttpclient
Зачем использовать SYNAPSE, если все это есть в нативном fphttpclient
Ichthyander
Да потому что только недавно столкнулся с тем, что понадобилось научиться работать с сетью в Паскале
Гуглил, рекомендовано использовать SYNAPCE, вот и разбираюсь с ним. То что мне нужно, я так и не нашел нигде на уровне исходников, чтобы понять как это работает.
А fphttpclient надо скачивать или устанавливать отдельно? Или он присутствует уже в Pascal?
Я в принципе использую Lazarus.
Да потому что только недавно столкнулся с тем, что понадобилось научиться работать с сетью в Паскале
Гуглил, рекомендовано использовать SYNAPCE, вот и разбираюсь с ним. То что мне нужно, я так и не нашел нигде на уровне исходников, чтобы понять как это работает.
А fphttpclient надо скачивать или устанавливать отдельно? Или он присутствует уже в Pascal?
Я в принципе использую Lazarus.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
5) есть библиотека для работы с SOAP: WebServiceToolkit.
Добавлено спустя 1 минуту 39 секунд:
Уже присутствует в FreePascal.
Но Вам придется попыхтеть, если действительно придется реализовывать работу SOAP протокола. Если в вашем случае, есть возможность избежать этого и использовать что-то менее громоздкой, то крайне рекомендую выбрать что-то другое при работе с API ЦБ РФ
Добавлено спустя 1 минуту 39 секунд:
IStukalov писал(а):А fphttpclient надо скачивать или устанавливать отдельно? Или он присутствует уже в Pascal?
Уже присутствует в FreePascal.
Но Вам придется попыхтеть, если действительно придется реализовывать работу SOAP протокола. Если в вашем случае, есть возможность избежать этого и использовать что-то менее громоздкой, то крайне рекомендую выбрать что-то другое при работе с API ЦБ РФ
Ichthyander
Ну как вариант смотреть еще на WebServiceToolkit дополнительно, про который вы написали (т.е. по сути на два модуля, которых я до этого не рассматривал). Но если все так про Synapce, он совсем не подходит для моих целей?
Просто я с ним вроде как разобрался, за исключением вышеуказанных пунктов. Во всяком случае коннект идет и ответы идут (не такие, которые я ожидаю, но все же).
Или Synapce в принципе сильно устарел и лучше его более не использовать?
Добавлено спустя 7 минут 38 секунд:
А что еще то можно использовать? На сайте ЦБ РФ написано, что либо XML либо .NET (так называемый Dataset). Второй вариант я не хочу, так как не люблю NET в целом да и кросплатформенный вариант не получится сделать. Поэтому я сейчас и пытаюсь разобраться с API с точки зрения работы через SOAP и получения данных через XML. Но пока не взлетает.
Ну как вариант смотреть еще на WebServiceToolkit дополнительно, про который вы написали (т.е. по сути на два модуля, которых я до этого не рассматривал). Но если все так про Synapce, он совсем не подходит для моих целей?
Просто я с ним вроде как разобрался, за исключением вышеуказанных пунктов. Во всяком случае коннект идет и ответы идут (не такие, которые я ожидаю, но все же).
Или Synapce в принципе сильно устарел и лучше его более не использовать?
Добавлено спустя 7 минут 38 секунд:
Ichthyander писал(а):Уже присутствует в FreePascal.
Но Вам придется попыхтеть, если действительно придется реализовывать работу SOAP протокола. Если в вашем случае, есть возможность избежать этого и использовать что-то менее громоздкой, то крайне рекомендую выбрать что-то другое при работе с API ЦБ РФ
А что еще то можно использовать? На сайте ЦБ РФ написано, что либо XML либо .NET (так называемый Dataset). Второй вариант я не хочу, так как не люблю NET в целом да и кросплатформенный вариант не получится сделать. Поэтому я сейчас и пытаюсь разобраться с API с точки зрения работы через SOAP и получения данных через XML. Но пока не взлетает.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Смотри. synapse или fphttpclient это то, что организует транспортный протокол, то есть HTTP(S). WebServiceToolkit берет на себя организацию протокола SOAP. Так вот, я рекомендую отказаться от SOAP, если такая возможность конечно есть, при работе с API.
А так и сам WebServiceToolki вроде как юзает либу synapse.
Если кроме SOAP никак, то пробуй реализовать самостоятельно на базе Synapse (что ты и пытаешься сделать) или fphttpclient, либо осваивай WebServiceToolkit
А так и сам WebServiceToolki вроде как юзает либу synapse.
Если кроме SOAP никак, то пробуй реализовать самостоятельно на базе Synapse (что ты и пытаешься сделать) или fphttpclient, либо осваивай WebServiceToolkit
Ichthyander
Понял, спасибо. Почитаю завтра, посмотрю.
В принципе если что, консультация с вашей стороны возможна? Если вдруг, будут затыки или непонимание...
Понял, спасибо. Почитаю завтра, посмотрю.
В принципе если что, консультация с вашей стороны возможна? Если вдруг, будут затыки или непонимание...
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Затыки с SOAP почти наверняка будут ( . Работал с SOAP очень давно: с WST (здесь на форуме даже топик делал) и непосредственно через synapse. Давно было, вряд ли что вспомню. Чтобы конкретно помочь, нужно погружаться, на что время не будет. Что знал - подсказал. Может быть товарищи с форума еще что подскажут - помогут
Ichthyander
Сегодня полдня изучал fphttpclient. Потом попробовал написать код запроса. Во общем столкнулся с проблемой, что никак не могу заполнить тело запроса (т.е. заголовок запроса сформировал без проблем). А тело никаким образом не заполняется. Посмотрел сам класс fphttpclient. А там по сути тело запроса объявлен как абстрактный класс TStream. Это что получается надо самому реализацию всего этого делать? Или я куда-то не туда смотрю?
Добавлено спустя 22 минуты 18 секунд:
Да похоже именно так
То есть нужно много самому дополнительно описывать. Вот уж не ожидал такого подхода. Во общем пока разбираюсь дальше.
Сегодня полдня изучал fphttpclient. Потом попробовал написать код запроса. Во общем столкнулся с проблемой, что никак не могу заполнить тело запроса (т.е. заголовок запроса сформировал без проблем). А тело никаким образом не заполняется. Посмотрел сам класс fphttpclient. А там по сути тело запроса объявлен как абстрактный класс TStream. Это что получается надо самому реализацию всего этого делать? Или я куда-то не туда смотрю?
Добавлено спустя 22 минуты 18 секунд:
Да похоже именно так
- Снег Север
- долгожитель
- Сообщения: 3069
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
IStukalov писал(а):Это что получается надо самому реализацию всего этого делать?
В чём проблема записать любой текст в стринглист и вывести его в стрим?
Снег Север
Нет проблемы, я уже так и сделал. Просто Synapse по сути автоматом все это делает, вот и все.
Уже разобрался как-то с этим классом. Он реально получше и более теперь восприятнее идет. Но подключиться к ЦБ РФ не могу. Возвращает код ошибки 403 и текст:
<h1>Forbidden - 403</h1>
<h1> Blocked by PT Application Firewall.</h1>
<pre>Request ID: 2022-03-18-20-32-11-709FC34F44B7C237</pre>
Написал повторно в тех поддержку ЦБ РФ. Надеюсь ответят. При этом скачал их ПО для теста и с моего компа все работает на ура. Подозрение, что проблема где-то рядом, только не могу уловить где...
Нет проблемы, я уже так и сделал. Просто Synapse по сути автоматом все это делает, вот и все.
Уже разобрался как-то с этим классом. Он реально получше и более теперь восприятнее идет. Но подключиться к ЦБ РФ не могу. Возвращает код ошибки 403 и текст:
<h1>Forbidden - 403</h1>
<h1> Blocked by PT Application Firewall.</h1>
<pre>Request ID: 2022-03-18-20-32-11-709FC34F44B7C237</pre>
Написал повторно в тех поддержку ЦБ РФ. Надеюсь ответят. При этом скачал их ПО для теста и с моего компа все работает на ура. Подозрение, что проблема где-то рядом, только не могу уловить где...
Ichthyander
Во общем посмотрел модуль fphttpclient. Он проще конечно в понимании, но честно говоря с ним тоже не могу соединиться с сервисом ЦБ РФ. Возвращается ошибка 403. При этом используя родную утилиту ЦБ РФ, вижу что она спокойно соединяется с ЦБ РФ (правда неизвестно каким реально способом).
Покопал в глубь этот класс и честно говоря такое впечатление, что там тоже что-то не до конца то ли учтено, то ли реализовано. И в принципе, почитав снова все, что касается HTTP протокола, пришел к выводу, что должно работать то, что описал ЦБ РФ у себя в части технической информации. Однако не работает:( Куда копать непонятно уже. Такое впечатление, что поддержка web в ObjectPascal ну совсем никакая. И что дальше делать непонятно пока.
Во общем посмотрел модуль fphttpclient. Он проще конечно в понимании, но честно говоря с ним тоже не могу соединиться с сервисом ЦБ РФ. Возвращается ошибка 403. При этом используя родную утилиту ЦБ РФ, вижу что она спокойно соединяется с ЦБ РФ (правда неизвестно каким реально способом).
Покопал в глубь этот класс и честно говоря такое впечатление, что там тоже что-то не до конца то ли учтено, то ли реализовано. И в принципе, почитав снова все, что касается HTTP протокола, пришел к выводу, что должно работать то, что описал ЦБ РФ у себя в части технической информации. Однако не работает:( Куда копать непонятно уже. Такое впечатление, что поддержка web в ObjectPascal ну совсем никакая. И что дальше делать непонятно пока.
Последний раз редактировалось IStukalov 21.03.2022 22:23:14, всего редактировалось 1 раз.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Поддержка web Лазарус реализовано. Я реализовал несколько веб-сервисов в нем. Документации мало - да. И погуглить мало что получается. В целом все работает. Ваш основной затык - это реализация SOAP. Я думаю в этом и проблема. Вам нужно разобраться как реализовать SOAP протокол на HTTPS. Там вроде нужно какие-то заголовки в сам заголовок HTTP запроса и другие вещи. Проверьте также как работает HTTPS. Может в этом проблема (OpenSSL).
