HTTPЗапрос.УстановитьТелоИзСтроки

Методы · SetBodyFromString

Устанавливает тело запроса из строки.

Синтаксис

УстановитьТелоИзСтроки(<ТелоКакСтрока>, <Кодировка>, <ИспользоватьBOM>)
Полное описание, параметры и ограничения

HTTPЗапрос.УстановитьТелоИзСтроки (HTTPRequest.SetBodyFromString)

HTTPЗапрос (HTTPRequest)

УстановитьТелоИзСтроки (SetBodyFromString)

Доступен, начиная с версии 8.2.

Синтаксис:
УстановитьТелоИзСтроки(<ТелоКакСтрока>, <Кодировка>, <ИспользоватьBOM>)
Параметры:

<ТелоКакСтрока> (обязательный)
Тип: Строка.
Содержит тело запроса в виде строки.

<Кодировка> (необязательный)
Тип: КодировкаТекста, Строка.
Определяет кодировку, в которой будет отправлен HTTP-запрос. Если параметр не задан, то тело отправляется в кодировке UTF8.
Установка этого параметра не вызывает автоматической установки соответствующего HTTP-заголовка.
Кодировка может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки.

В веб-клиенте параметр игнорируется. Строка интерпретируется в кодировке UTF-8.

Поддерживаемые названия кодировок:
UTF-8

UTF-16

UTF-16BE

UTF-16LE

ISO-8859-1

US-ASCII

gb18030

iso-8859-2

iso-8859-3

iso-8859-4

iso-8859-5

iso-8859-6

iso-8859-7

iso-8859-8

iso-8859-9

iso-8859-13

iso-8859-15

Shift_JIS

EUC-JP

Big5

Big5-HKSCS

GBK

GB2312

GB_2312-80

EUC-KR

KSC_5601

windows-949

windows-874

cp866

KOI8-R

KOI8-U

windows-1250

windows-1251

windows-1252

windows-1253

windows-1254

windows-1255

windows-1256

windows-1257

windows-1258

macintosh

x-mac-cyrillic

ISO-2022-JP

ISO-2022-KR

ISO-2022-CN

ISO-2022-CN-EXT

HZ-GB-2312
.

<ИспользоватьBOM> (необязательный)
Тип: ИспользованиеByteOrderMark.
Использовать метку порядка байтов (BOM) для кодировок, которые ее поддерживают: UTF-8, UTF-16 и др.
В режиме совместимости конфигурации значение по умолчанию - Использовать.

В веб-клиенте параметр игнорируется.
Значение по умолчанию: Авто.
Описание:

Устанавливает тело запроса из строки.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Примечание:
В веб-клиенте параметры <Кодировка>, <ИспользоватьBOM> игнорируются. Строка интерпретируется в кодировке utf-8.
Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Создать учебный товар методом POST

Сериализуем структуру в JSON, отправляем POST и отличаем создание 201 от повторного кода 409.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В 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.

  2. Используйте учебную файловую базу на том же компьютере. В клиент-серверной базе 127.0.0.1 означает машину сервера 1С, а не компьютер пользователя.

  3. Перед новым самостоятельным примером перезапустите учебный HTTP-сервер: это восстанавливает вымышленные товары A-01 и B-02. Рабочие базы и Avito этот сервер не использует.

  4. Если порт 18785 занят, сначала выясните, какой процесс его занимает; не останавливайте чужую службу. Не меняйте пример на адрес рабочего API.

  5. Перезапуск сервера перед первой проверкой обязателен, иначе C-03 может уже существовать.

Соединение = Новый HTTPСоединение("127.0.0.1", 18785, , , , 10, Неопределено);
Товар = Новый Структура("code,name,quantity", "C-03", "Тетрадь", 2);
Тело = ЗаписатьЗначениеJSON(Товар);
Запрос = Новый HTTPЗапрос;
Запрос.АдресРесурса = "/guide/products";
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния <> 201 Тогда
    ВызватьИсключение СтрШаблон("Товар не создан: HTTP %1, %2", Ответ.КодСостояния, Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
КонецЕсли;
Созданный = ПрочитатьЗначениеJSON(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
Сообщить(Созданный.name);
Сообщить(Созданный.quantity);
Сообщить(Ответ.Заголовки.Получить("Location"));

Разбор по шагам

  1. Структура задаёт известные поля учебного контракта; ЗаписатьЗначениеJSON создаёт строку.

  2. Неинициализированному HTTPЗапрос задаём адрес, заголовок Content-Type и UTF-8 тело без BOM.

  3. ОтправитьДляОбработки выполняет POST; проверяем ожидаемый статус 201.

  4. Читаем созданный товар и Location, указывающий на новый ресурс.

Как проверить результат

  1. Первый запуск выводит Тетрадь, 2 и /guide/products/C-03.

  2. Повторный запуск без перезапуска сервера получает 409 code_exists.

  3. После перезапуска задайте quantity=-1: получите 422 invalid_product.

Ожидаемый результат

В памяти учебного сервера создан товар C-03, файлы и реальные товары не изменяются.

На что обратить внимание

  1. POST в рабочем API может создавать настоящий объект. Не переносите адреса и тестовые данные в production.

  2. Не повторяйте изменяющий запрос автоматически после таймаута без проверки идемпотентности: сервер мог уже выполнить создание.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Подготовить HTTP-запрос с JSON без отправки

Разделяем подготовку запроса и сетевую операцию: этот код ничего не отправляет.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Нет токенов, соединения и обращения к реальному API.

  2. Адрес /api/items — учебный путь, не адрес Avito.

  3. Тело состоит из JSON-совместимых значений.

Данные = Новый Структура("title,quantity", "Книга", 3);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Попытка
    ЗаписатьJSON(Запись, Данные);
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Тело = Запись.Закрыть();
ЗапросHTTP = Новый HTTPЗапрос("/api/items");
ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ЗапросHTTP.Заголовки.Вставить("Accept", "application/json");
ЗапросHTTP.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8);
Сообщить(ЗапросHTTP.АдресРесурса);
Сообщить(ЗапросHTTP.ПолучитьТелоКакСтроку());

Разбор по шагам

  1. Сериализуем структуру в строку JSON.

  2. Создаём запрос с относительным путём и заголовками.

  3. Передаём тело в UTF-8 и проверяем его чтением обратно.

Как проверить результат

  1. АдресРесурса равен /api/items.

  2. Прочитанное тело содержит title=Книга, quantity=3.

Ожидаемый результат

Подготовленный объект HTTPЗапрос с JSON в UTF-8; сеть не используется.

На что обратить внимание

  1. Метод GET/POST выбирается при отправке через HTTPСоединение.

  2. Не вставляйте секреты в учебные примеры или журнал сообщений.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.