Руководство разработчика

Объектный тип HTTP_ПОЛЕ_ФОРМЫ

Тип HTTP_ПОЛЕ_ФОРМЫ предназначен описания поля формы по аналогии с параметром curl --form. Используется в методе ЗАПРОС_ФАЙЛ объектного типа HTTP.

Поля

Тип Поле Описание Значение по умолчанию
СТРОКА имяИмя параметра формы.
СТРОКА значениеЗначение параметра формы. Строки передаются в кодировке UTF-8. Для поддержки национальных букв требуется заполнения поля encoder. Если параметр является файлом, то задает имя файла на стороне сервера (аналог параметра filename в команде curl --form).
СТРОКА файлЕсли значение является пустой строкой, то это обозначает обычный параметр формы, значение которого указано в поле значение. Для обозначение вложенной группы файлов в этом поле необходимо указать "*". Для загрузки файла указывается его имя в рабочей папке или полный путь на локальном компьютере.
СТРОКА encoderСпособ кодирования данных. Аналог параметра encoder в команде curl --form. Если указана пустая строка, то данные помещаются в http запрос в том виде, как они заданы. Поддерживаются следующие типы кодирования:
  • "base64" – подходит для кодирования двоичных данных и строк с национальными символами;
  • "quoted-printable" – подходит для кодирования строк.
См. другие типы кодирования и подробности в документации curl.
СТРОКА content_typeПозволяет явно указать тип содержимого для отдельного поля. Аналог параметра type в команде curl --form. При загрузке файлов curl пытается автоматически определить тип содержимого по известным расширениям файлов.
СТРОКА: @[СТРОКА] заголовкиДополнительные заголовки HTTP для отдельного поля. Аналог параметра headers в команде curl --form.
HTTP_ПОЛЕ_ФОРМЫ: @[] поляВложенные поля для отправки группы файлов. Используется только при указании значения поля файл как "*".

Пример 1

Перадача нескольких простых параметров формы и одного файла.

ВЫЧИСЛИТЬ
  ПЕРЕМ HTTP: запрос
  запрос.url = "http://example.com"
  запрос.отладка = ДА
  
  ПЕРЕМ& п1 = запрос.поля_формы[1]
  п1.имя = "ascii_text"
  п1.значение = "Hello, World!"  // ASCII текст без кодирования

  ПЕРЕМ& п2 = запрос.поля_формы[2]
  п2.имя = "localized_text"
  п2.значение = "Здравствуй, Мир!"
  п2.encoder = "base64"          // Русский текст - UTF-8 кодируется в base64
  
  ПЕРЕМ& п3 = запрос.поля_формы[3]
  п3.имя = "picture"
  п3.значение = "pic.jpg"        // имя файла на сервере
  п3.файл = "D:\Users\developer\Pictures\Unnamed.jpg" // загрузка данных из файла
  п3.encoder = "base64"          // двоичные данные кодируются в base64

  ПЕРЕМ рез = запрос.ЗАПРОС_ФАЙЛ("*", "resp.txt", "POST")
  ОТЛАДКА(рез)
КОНЕЦ

Соответствует следующей команде curl:

curl --location --request POST --verbose http://example.com
  --form "ascii_text=Hello, World!"
  --form "localized_text=Здравствуй, Мир!;encoder=base64"
  --form "picture=@D:\Users\developer\Pictures\Unnamed.jpg;filename=pic.jpg;encoder=base64" 
  --output resp.txt

Пример 2

Перадача нескольких файлов в одном параметре. Для файлов создается вложенный раздел multipart/mixed с элементами Content-Disposition: attachment.

ВЫЧИСЛИТЬ
  ПЕРЕМ HTTP: запрос
  запрос.url = "http://example.com"
  запрос.отладка = ДА
  
  ПЕРЕМ& п1 = запрос.поля_формы[1]
  п1.имя = "alpha" 
  п1.значение = "Hello, World!" // простое поле формы  

  ПЕРЕМ& п2 = запрос.поля_формы[2]
  п2.имя = "cluster"
  п2.файл = "*"                 // группа файлов
  
  ПЕРЕМ& пп1 = п2.поля[1]
  пп1.значение = "alpha.txt"
  пп1.файл = "D:\Users\developer\Documents\a.txt"

  ПЕРЕМ& пп2 = п2.поля[1]
  пп2.значение = "beta.txt"
  пп2.файл = "D:\Users\developer\Documents\b.txt"

  ПЕРЕМ рез = запрос.ЗАПРОС_ФАЙЛ("*", "resp.txt", "POST")
  ОТЛАДКА(рез)
КОНЕЦ

Соответствует следующей команде curl:

curl --location --request POST --verbose http://example.com
  --form "alpha=Hello, World!"
  --form "cluster=@D:\Users\developer\Documents\a.txt;filename=alpha.txt,D:\Users\developer\Documents\b.txt;filename=beta.txt" 
  --output resp.txt

См. также: