gifts2017

Удобная отправка HTTP(s) POST запроса

Опубликовал Pavel Fomin (Pasha1st) в раздел Программирование - Практика программирования

Удобная отправка HTTP/HTTPS POST запроса с параметрами и передачей файла.
Используется UTF-8 и application/x-www-form-urlencoded и multipart/form-data кодирование.

Когда мне потребовалось отправить HTTP/HTTPS POST запрос с параметрами и передачей файла, подходящего и удобного средства не нашел. Пришлось написать небольшой модуль, который, возможно, пригодится кому-нибудь еще.

Есть аналогичный модуль для 1Cv7.7 через MSXML.XMLHTTPRequest, но без поддержки файлов, подготовлю чуть позже.

Для начала требуется получить структуру, описывающую куда и как будем подключаться, функцией РазбитьУРЛ(), возможно дозаполнить свойства.
Далее требуется заполнить соответствия для передачи GET/POST параметров и файлов и вызвать ОтправитьЗапрос()

//Создает структуру и заполняет на основании URL
//Параметры: //Протокол - HTTP или HTTPS
//Порт - по умолчанию 80 для HTTP и 443 для HTTPS
//Безопасное - если протокол HTTPS
//Сервер - имя сервера
//Путь - путь к скрипту/странице на сервере
//СерверИПуть - адрес обращения вида www.server.ru/path/to/query.php
//Пользователь - имя пользователя для Basic авторизации на сайте
//Пароль - пароль пользователя для Basic авторизации
//
//Урл должен быть строкой вида [Протокол://][Пользователь:Пароль@]Сервер[:порт][/Путь]
//Примеры:
//https://server.ru:4001/path/script.php
//http://username:password@server.ru
Функция РазбитьУРЛ(знач урл) Экспорт

//Адрес - структура, которую возвращает функция РазбитьУРЛ()
//_Прокси - опциональные параметры для использования прокси-сервера
// Параметры структуры Прокси
//  РежимПрокси - число:
//   0 - не использовать прокси
//   1 - использовать системные установки (по умолчанию)
//   2 - использовать явные настройки прокси
// Пользователь - имя пользователя прокси-сервера
// Пароль - пароль пользователя прокси-сервера
// Сервер - адрес прокси-сервера. Возможно указание порта как сервер:порт
//ГетПараметры,ПостПараметры,Файлы - Соответствия, где Ключ - имя параметра как оно будет передано, Значение - значение параметра или имя файла для передачи
//УдалятьФайлы (булево) - удалять файлы из набора Файлы после передачи. По умолчанию не удалять.
Функция ОтправитьЗапрос(Адрес,знач _Прокси=Неопределено,ГетПараметры=Неопределено,ПостПараметры=Неопределено,Файлы=Неопределено,УдалятьФайлы=Ложь) Экспорт

Возвращает функция структуру со свойствами:
Ошибка - описание ошибки или Неопределено в случае успеха
Ответ - имя временного файла, содержащего ответ сервера. Разработчик должен сам позаботиться о его удалении
Инет - объект HTTPСоединение, который использовался для запроса

Дополнительно:
Функция U2UTF8(стр)
Кодирует строку в UTF-8, возвращая массив байт

Попутно столкнулся с интересной задачей: требуется писать в текстовый файл в кодировке UTF-8, но без BOM-заголовка. Решение: создаем файл в кодировке ANSI, сразу закрываем и открываем на дозапись в UTF-8:

  Текст=Новый ЗаписьТекста(ВхИмя,КодировкаТекста.ANSI);
  Текст.Закрыть();
  Текст=Новый ЗаписьТекста(ВхИмя,КодировкаТекста.UTF8,,Истина);

Скачать файлы

Наименование Файл Версия Размер
HTTPЗапрос1С8.x 32
.epf 11,73Kb
03.11.14
32
.epf 1.0 11,73Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр (Иной) 09.11.14 00:01
Сохранил.

А примера получения ответа (файла) на реквест у Вас нету?
2. Pavel Fomin (Pasha1st) 09.11.14 00:21
Собственно в обработке есть классическая форма, отправляющая запрос и выводящая ответ. Весь код процедуры-примера использования на скриншоте. Что-нибудь требуется прокомментировать подробнее?