публикация исходной ИБ (crm) с повторным использованием сеансов отвечает HTTP 400 без заголовка сеанса

This commit is contained in:
mihailkudravcev
2026-08-11 15:42:46 +03:00
parent f306257050
commit 17e5a81a1d
3 changed files with 36 additions and 1 deletions
+11
View File
@@ -4,6 +4,17 @@
--- ---
## 1.3.1.54 (2026-08-11)
### Исправлено
- `РК_ОбменСВнешнейБазой`: заголовок `IBSession: start` при вызовах Transfer API —
иначе публикация с повторным использованием сеансов отвечает HTTP 400
(«Не указан заголовок управления сеансами…»).
- Краткий текст ошибки HTTP (из `<descr>` XML-ответа платформы) для формы проверки.
---
## 1.3.1.53 (2026-08-11) ## 1.3.1.53 (2026-08-11)
### Исправлено ### Исправлено
+2
View File
@@ -99,6 +99,8 @@
// Р.Успех, Р.Текст, Р.Ответ, Р.Ошибка — GET /v1/health через РК_ОбменСВнешнейБазой // Р.Успех, Р.Текст, Р.Ответ, Р.Ошибка — GET /v1/health через РК_ОбменСВнешнейБазой
``` ```
HTTP-клиент передаёт `IBSession: start` (публикация с повторным использованием сеансов) и `X-Transfer-Token`.
Пара: расширение **`ws-rhana`** на исходной ИБ (≥ 0.0.0.30 для складов/остатков; health — с ранних версий). Пара: расширение **`ws-rhana`** на исходной ИБ (≥ 0.0.0.30 для складов/остатков; health — с ранних версий).
### Обработки и формы ### Обработки и формы
@@ -158,6 +158,8 @@
?(Разбор.HTTPS, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено)); ?(Разбор.HTTPS, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено));
ЗапросHTTP = Новый HTTPЗапрос(ПутьЗапроса); ЗапросHTTP = Новый HTTPЗапрос(ПутьЗапроса);
// Повторное использование сеансов HTTP на публикации 1С (иначе HTTP 400 без IBSession).
ЗапросHTTP.Заголовки.Вставить("IBSession", "start");
// X-Transfer-Token не конфликтует с Basic Auth пользователя публикации (см. README ws-rhana). // X-Transfer-Token не конфликтует с Basic Auth пользователя публикации (см. README ws-rhana).
Если Не ПустаяСтрока(Ключ) Тогда Если Не ПустаяСтрока(Ключ) Тогда
ЗапросHTTP.Заголовки.Вставить("X-Transfer-Token", Ключ); ЗапросHTTP.Заголовки.Вставить("X-Transfer-Token", Ключ);
@@ -187,7 +189,7 @@
Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда
ЗаписьЖурналаРегистрации("РК_ОбменСВнешнейБазой", УровеньЖурналаРегистрации.Ошибка, , , ЗаписьЖурналаРегистрации("РК_ОбменСВнешнейБазой", УровеньЖурналаРегистрации.Ошибка, , ,
"HTTP " + ОтветHTTP.КодСостояния + " " + Относительный + ": " + ТекстОтвета); "HTTP " + ОтветHTTP.КодСостояния + " " + Относительный + ": " + ТекстОтвета);
ВызватьИсключение "Ошибка HTTP " + ОтветHTTP.КодСостояния + ": " + ТекстОтвета; ВызватьИсключение КраткийТекстОшибкиHTTP(ОтветHTTP.КодСостояния, ТекстОтвета);
КонецЕсли; КонецЕсли;
Чтение = Новый ЧтениеJSON; Чтение = Новый ЧтениеJSON;
@@ -228,4 +230,24 @@
КонецФункции КонецФункции
Функция КраткийТекстОшибкиHTTP(КодСостояния, ТекстОтвета)
Описание = СокрЛП(Строка(ТекстОтвета));
ПозицияDescr = СтрНайти(Описание, "<descr>");
Если ПозицияDescr > 0 Тогда
Хвост = Сред(Описание, ПозицияDescr + 7);
ПозицияКонец = СтрНайти(Хвост, "</descr>");
Если ПозицияКонец > 0 Тогда
Описание = СокрЛП(Лев(Хвост, ПозицияКонец - 1));
КонецЕсли;
КонецЕсли;
Если СтрДлина(Описание) > 500 Тогда
Описание = Лев(Описание, 500) + "…";
КонецЕсли;
Возврат "Ошибка HTTP " + КодСостояния + ": " + Описание;
КонецФункции
#КонецОбласти #КонецОбласти