Подключение к веб-сервисам ЦБ РФ.

Модератор: Модераторы

IStukalov
новенький
Сообщения: 25
Зарегистрирован: 16.03.2022 13:35:43

Сообщение IStukalov »

Ichthyander
По факту на самом деле у ЦБ РФ не явный протокол SOAP. Т.е. у них по сути SOAP вложен в HTTP. Например адрес их веб-сервера с веб-сервисами такой:
http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
Сам HTTP запрос (заголовок) выглядит следующим образом:

Код: Выделить всё

POST /DailyInfoWebServ/DailyInfo.asmx HTTP/1.1
Host: www.cbr.ru
Content-Type: application/xml; charset=utf-8
Content-Length: 357


Именно формирование такого заголовка я реализовал через код.
Далее по правилам HTTP идет пустая строка и тело по сути уже этого запроса (так как ЦБ РФ использует POST метод). В теле как раз указывается сам пакет (конверт) SOAP сообщения:

Код: Выделить всё

<?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>2022-03-21</On_date>
</GetCursOnDateXML>
</soap:Body>
</soap:Envelope>


Проблема в том, что я в принципе когда отправляю запрос, ловлю ошибку 403. Т.е. я просто не могу достучаться до сервиса ЦБ РФ.
Сам ответ от ЦБ РФ приходит в таком ключе:

Код: Выделить всё

<body>
<h1>Forbidden - 403</h1>
<h1> Blocked by PT Application Firewall.</h1>
<pre>Request ID: 2022-03-21-19-32-30-619939362FB6B74B</pre>
</body>


И честно говоря, куда уж проще еще написать не понимаю пока что. Т.е. если бы у меня хотя бы получился коннект, то тогда вопросов не было. А тут даже без тела получаю отлуп от сервера...

Добавлено спустя 10 минут 44 секунды:
И это кстати я за 3 три дня перекопал туеву тучу информации как по Lazarus, так и по HTTP протоколу. Там все просто. Вот только впечатление такое, что в сокет летит некорректная информация, которая как раз и не воспринимается веб-сервером и веб-сервисом ЦБ РФ.

Добавлено спустя 18 минут 27 секунд:
Либо нужно точное описание/понимание методов POST, которых у данного класса в Lazarus довольно таки много...
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3069
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Отлуп может быть связан с блокировкой опознанного синапса. Я с подобным сталкивался. Помогает маскировка соединения под один из стандартных браузеров.
IStukalov
новенький
Сообщения: 25
Зарегистрирован: 16.03.2022 13:35:43

Сообщение IStukalov »

Снег Север
А можете написать как именно? Я вроде добавлял маскировку в виде тега и мозиллы 4.0. Но все равно не помогает. Поэтому пока не могу понять, куда копать или рыть дальше.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3069
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Например Http.UserAgent := 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'; Стоит попробовать перебрать несколько вариантов. Поищите в интернете.
IStukalov
новенький
Сообщения: 25
Зарегистрирован: 16.03.2022 13:35:43

Сообщение IStukalov »

Снег Север
Спасибо, попробую сейчас.

Добавлено спустя 1 час 43 минуты 23 секунды:
Во общем с Synapse разобрался :) Заработало. Но чтобы окончательно понять, что происходит, пришлось через трассировку смотреть конечный пакет, который уходил. И просто увидел, что там сборка происходит заголовка на автомате и многие предохранительные вещи, с моей стороны излишние. Короче потер лишний код, который "помогал" с моей точки зрения формировать заголовок, заполнил более корректно все переменные связанные со сборкой заголовка пакета и все заработало. Проблема с Synapse ушла.
Теперь хочу попробовать тоже самое через родной пакет Lazarus сделать. Мне он по факту больше понравился.

Но реально документации не хватает. Без нее трудновато разбираться...

Добавлено спустя 22 часа 38 минут 7 секунд:
Итак, убил еще один день на эксперименты с классом fphttpclient. Так и не получилось с помощью него законектиться с вебсервисом ЦБ РФ корректно. Проблема мне видится в том, что заголовок запроса формируется некорректно. Т.е. какую то часть заголовка, класс перезатирает, когда я вызываю метод POST для отправки данных в ЦБ РФ.Так как внутри происходят телодвижения с заголовком. Плюс не совсем понятно, как в принципе осуществляется попытка сформировать заголовок (у Synapse я изучил и понял, а тут непонятно).
Плюс у некоторых методов POST возникают различные ошибки при попытке обратиться к Stream классу, где-то внутри (типа READ). Однако методы которые я вызываю, не содержат в качестве входных параметров данный тип. Собственно кто-то может помочь разобраться с данным классом? Или он априори все таки сырой? Во всяком случае SYNAPSE реально работает как мне нужно, просто не было информации, как правильно заполнять данные и что можно указывать в заголовке запроса и как, а что нет.

Но у класса Lazarus нативная поддержка все таки, плюс он обновляется возможно, в отличии от Synapse.
Ответить