Получает поток для чтения тела ответа.
Синтаксис
ПолучитьТелоКакПоток()Полное описание, параметры и ограничения
HTTPОтвет.ПолучитьТелоКакПоток (HTTPResponse.GetBodyAsStream)
HTTPОтвет (HTTPResponse)
ПолучитьТелоКакПоток (GetBodyAsStream)
Доступен, начиная с версии 8.3.10.
Синтаксис:
ПолучитьТелоКакПоток()
Возвращаемое значение:
Тип: Поток, ПотокВПамяти, ФайловыйПоток.
Описание:
Получает поток для чтения тела ответа.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.10.
Описание изменено в версии 8.3.21.
Методическая информация
Практические примеры
Отправить двоичное тело и прочитать ответ как данные или поток
Учебный echo возвращает те же байты. Сравниваем Hex и показываем, что поток требует закрытия и контроля фактического чтения.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В PowerShell запустите: & "C:\Program Files\nodejs\node.exe" "C:\Opencart_project\AmaDesk\tools\1c-platform-context-8.5.1.1343\guide-http-mock.cjs". Оставьте терминал открытым; остановка — Ctrl+C.
Используйте учебную файловую базу на том же компьютере. В клиент-серверной базе 127.0.0.1 означает машину сервера 1С, а не компьютер пользователя.
Перед новым самостоятельным примером перезапустите учебный HTTP-сервер: это восстанавливает вымышленные товары A-01 и B-02. Рабочие базы и Avito этот сервер не использует.
Если порт 18785 занят, сначала выясните, какой процесс его занимает; не останавливайте чужую службу. Не меняйте пример на адрес рабочего API.
Соединение = Новый HTTPСоединение("127.0.0.1", 18785, , , , 10, Неопределено);
Данные = ПолучитьДвоичныеДанныеИзСтроки("abc", КодировкаТекста.UTF8, Ложь);
Запрос = Новый HTTPЗапрос("/guide/echo");
Запрос.Заголовки.Вставить("Content-Type", "application/octet-stream");
Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
Сообщить(Запрос.ПолучитьТелоКакДвоичныеДанные().Размер());
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ВызватьИсключение "Echo вернул ошибку";
КонецЕсли;
Возвращённые = Ответ.ПолучитьТелоКакДвоичныеДанные();
Сообщить(ПолучитьHexСтрокуИзДвоичныхДанных(Возвращённые));
Поток = Ответ.ПолучитьТелоКакПоток();
Попытка
Буфер = Новый БуферДвоичныхДанных(3);
Позиция = 0;
Пока Позиция < 3 Цикл
Прочитано = Поток.Прочитать(Буфер, Позиция, 3 - Позиция);
Если Прочитано = 0 Тогда
ВызватьИсключение "Ответ оборван";
КонецЕсли;
Позиция = Позиция + Прочитано;
КонецЦикла;
Исключение
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Поток.Закрыть();
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер, КодировкаТекста.UTF8));
ПотокЗапроса = Запрос.ПолучитьТелоКакПоток();
ПотокЗапроса.Закрыть();Разбор по шагам
Получаем ровно три байта abc без BOM и задаём двоичное тело запроса.
Успешный ответ читаем как ДвоичныеДанные и сравниваем известный Hex.
Поток читаем циклом до трёх байтов: один вызов не обязан вернуть весь объём.
Закрываем полученные потоки независимо от успешного чтения.
Как проверить результат
Размер тела запроса 3, Hex ответа 616263.
После чтения потока восстановлен текст abc.
Замените исходное abc на ab: проверка ожидаемых трёх байтов должна сообщить Ответ оборван.
Ожидаемый результат
Двоичные данные переданы и получены без преобразования тела в JSON.
На что обратить внимание
Здесь ожидаемая длина известна заранее. Для внешних ответов задавайте безопасный максимальный размер и правила завершения чтения.
Запрос.ПолучитьТелоКакПоток читает подготовленное тело запроса, Ответ.ПолучитьТелоКакПоток — полученное тело ответа.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.