powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передать XML POST запросом без изменения структуры.
10 сообщений из 10, страница 1 из 1
Передать XML POST запросом без изменения структуры.
    #40028251
sart74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Пытаюсь в Delphi 7 сделать модуль передачи сообщений в СМЭВ из своей БД.
Собственно связь со СМЭВ осуществляется с помощью СМЭВ-коннектора на вход которому я должен подать XML POST запросом.
В принципе задача, казалось бы несложная - тестовый клиент, idHTTP (у меня Indy 9.00.10), из XML файла набирается TStringList и методом POST отправляется. Но получаю Bad Request. Неверная структура запроса.
Из браузера отправляю тот же XML - получаю нормальный ответ от СМЭВ коннектора.
Поставил сниффер, выясняю, чем пакеты отличаются.

Из браузера (часть запроса):

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
eXtensible Markup Language
    <?xml
        version="1.0"
        encoding="UTF-8"
        ?>
    <importPaymentsRequest
        xmlns="urn:prbank-ru:abonent:gkh.v3.0"
        idAbonent="omega">
        <NotificationOfOrderExecution>
            <TransportGUID>
                eb10e5d9-69e8-48e3-a8b5-561888eb6408
                </TransportGUID>
         



Из моего клиента:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
eXtensible Markup Language
    <?xml
        version="1.0"
        encoding="UTF-8"
        ?>
    &
    <importPaymentsRequest
        xmlns="urn:prbank-ru:abonent:gkh.v3.0"
        idAbonent="omega">
        &
        <NotificationOfOrderExecution>
            &
            <TransportGUID>
                eb10e5d9-69e8-48e3-a8b5-561888eb6408
                </TransportGUID>
           



То есть Tstrings передается как склеенные & строки. Это единственное отличие, которое я нашел.
Похоже, СМЭВ коннектор не понимает такой формат запроса..

Новее версию компонентов для D7 я скачать не смог, поставил RAD Delphi 10.4.1. портировал клиента туда.
Но в перехваченном пакете все точно так же склеено. И такая же ошибка...
Может быть кто-то сталкивался с такой проблемой? Как передать структуру XML без изменений?
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028254
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
какая у тебя СУБД ?
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028256
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sart74,

Tstrings просто так амперсанды не вклеивает. Без кода трудно предположить что происходит
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028262
sart74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СУБД у меня самописная, на delphi 7. Прием коммунальных платежей. На основе FireBird. Собственно, поэтому модуль на семерке и пишу, чтобы потом прикрутить к ней.

Код примерно такой. (это уже после нескольких модификаций, пробую через поток сделать)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
If OD1.Execute Then begin

  inStr:=TStringList.Create;
  xmlStr:=TMemoryStream.Create;
  Instr.LoadFromFile(OD1.FileName);
  inStr.SaveToStream(xmlStr);

end;

res:=Form1.IdHTTP1.Put(Trim(Conn.Text),xmlStr);



В предыдущем варианте использовал вариант POST с TStrings, отправлял просто instr

Instr.LoadFromFile(OD1.FileName);
res:=Form1.IdHTTP1.Put(Trim(Conn.Text),inStr);[/SRC]

но изменений никаких, та же ошибка.

Настройки Request прописаны в свойствах компонента, собственно, там я правил только

Accept = applicaton/xml
ContentType = application/xml
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028264
sart74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zelius
sart74,

Tstrings просто так амперсанды не вклеивает. Без кода трудно предположить что происходит


Дело в том, что если я выгружаю Tstrings с загруженным XML в Memo, там амперсендов нет, получается,
что они возникают на этапе отправки запроса. Это уже что-то в idHTTP происходит.
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028268
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sart74,

отправляй тело как TStringStream, а не TStringList
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028272
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sart74,

Я что-то такое помню, что в HTTP нельзя передавать пустые строки. Не уверен что это относится к Put, но всё-же проверьте.
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028274
sart74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

Насчет PUT это я ошибся, должно быть POST, конечно же.
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028282
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sart74,

пройдись отладчиком, посмотри где идет замена CRLF (EncodeLineBreaks), выбери другой Post метод, в 10.6 есть с именем файла и инди сама оттуда загружает контент
...
Рейтинг: 0 / 0
Передать XML POST запросом без изменения структуры.
    #40028288
sart74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asutp2
sart74,

отправляй тело как TStringStream, а не TStringList


Честно говоря, с потоками как-то не приходилось работать, TStringStream ни разу еще не использовал. Не совсем понял, как в него корректно загрузить XML. Но вот такой вариант, вроде бы, подошел:

Код: pascal
1.
2.
3.
4.
  memXML:=TMemoryStream.Create;
  memXML.LoadFromFile(OD1.FileName);

  res:=Form1.IdHTTP1.Post(Trim(Conn.Text),memxml);



Мне вернулось HTTP/1.1 200 OK,

в теле запроса все нормально. Правда, Response все-таки вернул ошибку, но это уже что-то по значениям в XML, буду разбираться с настройками коннектора.

Огромное спасибо !!!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передать XML POST запросом без изменения структуры.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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