Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: В XML файле вначале BODY в режиме HEX есть 3 символа: EF BB BF
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kuzma2000
А помогите с формированием тела HTTP запроса в 1С.

Нам нужно отправлять в банк POST запрос с XML структурой.
В 1С сформировал заголовок и саму структуру.
Но банк рукается на парсинг - в начале тела сообщения есть какие то символы.

Отпарсил в Proxyman - да, таки есть.

В начале BODY в режиме HEX есть 3 символа: EF BB BF

Потом уже идет то, что я вставляю <?xml и т.д..

Ну и банк пишет что за заначки перед "<?xml"


Вот код который я тестирую.
Пробовал по разному отправить POST запрос - все равно в начале что-то есть.
Пробовал на разных платформах. Работаем на 8.3.18.1627.

Может кто-то сталкивался с такой бедой?
Что-то можете подсказать, что делать в этой ситуации?

    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", "Bearer " + Токен);
    Параметры = "<?xml  version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
    |<PayerPays>
    |</PayerPays>
    |";
    
    НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
    НовыйЗапрос.УстановитьТелоИзСтроки(Параметры);
    SSL         = Новый ЗащищенноеСоединениеOpenSSL;
    Соединение  = Новый HTTPСоединение(Сервер, 443, , , , 3000, SSL, Ложь);
    //1Ответ       = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос);
    //2Ответ       = Соединение.Записать(НовыйЗапрос)
    HTTPОтвет = Соединение.ОтправитьДляОбработки(НовыйЗапрос);
Vofka
А скриншот это откуда?
Попробуйте сохранить ваш XML в файл на диске и посмотреть есть ли там эти символы.
kuzma2000
Vofka @ Сегодня, 18:08 необходимо зарегистрироваться для просмотра ссылки ,
Скриншот из Proxyman
Это я полез копаться что ж собственно шлет 1С наружу

В режиме обычного просмотра ничего не видно.
В Hex какие-то символы.
Банк вот это показывает.

Вот про файл я не понял, простите.

Как записать в файл данные из объекта НовыйЗапрос?

Если я в переменную Параметры напишу что угодно (какой-то "тест") то потом эта строчка через НовыйЗапрос.УстановитьТелоИзСтроки(Параметры) попадает в НовыйЗапрос

kuzma2000 @ Сегодня, 18:19 необходимо зарегистрироваться для просмотра ссылки ,
Вот что прислал банк.


Я пробовал в качестве тела сообщения писать любой тестовый текст - всегда есть 3 символа.
Видимо их некорректно парсит банк.
sava1
Емть такая мулька. Решения не помню. Гугл в помощь.BOL или чтото похлжее
kuzma2000
sava1 @ Сегодня, 18:38 необходимо зарегистрироваться для просмотра ссылки ,
Попробовал
НовыйЗапрос.УстановитьТелоИзСтроки(Параметры, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

То же самое

Почитал - таки да, EF BB BF это как раз BOM для UTF-8

Но блин не выключаеться почему-то.
Vofka
kuzma2000, а если писать строку в кодировке ANSI?

Только что быстренько нагуглил такое:
ЗТ = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
ЗТ.Закрыть();
ЗТ = Новый ЗаписьТекста(ИмяФайла,,, Истина, Символы.ПС);
ЗТ.Записать(Данные);
ЗТ.Закрыть();

Тут человек сначала записывает пустой файл в кодировке ANSI, потом туда дописывает что надо в кодировке UTF-8. Это может не совсем прям то, что вам надо (т.к. тут создается файл на диске), но если другого варианта не найдете, можете попробовать это прогонять таким образом через временный файл и потом файл удалять.
kuzma2000
Vofka @ Сегодня, 19:15 необходимо зарегистрироваться для просмотра ссылки ,
Попробовал так
НовыйЗапрос.УстановитьТелоИзСтроки(Параметры, КодировкаТекста.ANSI ,ИспользованиеByteOrderMark.НеИспользовать);

Все равно добавляет в тело BOM

Vofka @ Сегодня, 19:20 необходимо зарегистрироваться для просмотра ссылки ,
Будем пробовать, спасибо.

Сделал, вроде работает.
Осталось банку попросить првоерить.

Глупая ошибка была.
Vofka
Цитата(kuzma2000 @ 22.04.25, 19:38) необходимо зарегистрироваться для просмотра ссылки
Глупая ошибка была.

Так а как сделали в итоге?
xlmel
Vofka @ Вчера, 9:49 необходимо зарегистрироваться для просмотра ссылки ,
Была похожая проблема. Сделал так на MS Windows

ТекстДок = Новый COMОбъект("scripting.filesystemobject");
ТекстФайл = ТекстДок.createtextfile(ИмяФайла);
Стр = "<?xml version=""1.0"" encoding=""windows-1251""?> и здесь все тело файла
ТекстФайл.write(Стр);
ТекстФайл = 0;
ТекстДок = 0;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.