Использование метода DELETE в объекте HTTPСоединение

12.09.13

Интеграция - WEB-интеграция

Методы GET и POST разжеваны на портале как надо.
Я поделюсь своими соображениями про метод DELETE.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Внешняя обработка
.epf 14,17Kb
19
19 Скачать (1 SM) Купить за 1 850 руб.

Не секрет, что платформа 1С8 (8.2, 8.3) неполноценно поддерживает методы PUT и DELETE в объекте HTTPСоединение.

Два дня поиска решения в Интернет привели к выводу использовать COMОбъект WinHttpRequest. Я уж было обрадовался, что раздобыл такой интереснейший инструментик, но и тут меня ожидал сюрприз: не все сайты поддерживают свойство этого объекта SetCredentials.

Суть в том, что сервер должен запросить авторизацию и только тогда свойство SetCredentials(ИмяПользователя, Пароль, 0) сработает.

Спасибо пользователю torgm, который в ветке http://www.forum.mista.ru/topic.php?id=654266 описал свои поиски для платформы 7.7. Суть его доработки заключается в добавлении заголовка "Autorization" для WinHttpRequest с одновременным кодированием строки "ИмяПользователя:Пароль" в base64.

Итого: здесь я выкладываю рабочий код для платформ 8.2/8.3 (проверено на последних (или почти последних) релизах платформ.

Прикрепленная обработка включает в себя работу:

 - со стандартным HTTPСоединение (в синтаксисе работы с запросом, т.к. для меня было важно при ошибке 400 не вылетать с исключением);

 - метода DELETE с передачей тела запроса (именно то, что не умеет делать 1С) с использованием WinHttpRequest;

 - ну и стандартного GET, который 1С поддерживает на ура.

Преобразование в base64, слава Богу, делается стандартными средствами 1С:

Функция Кодировать(СтрокаКодирования)
	
	ИмяОченьВременногоФайла = ПолучитьИмяВременногоФайла();
	ЗаписьТекста = Новый ЗаписьТекста(ИмяОченьВременногоФайла, СокрЛП(Кодировка));
	ЗаписьТекста.Записать(СтрокаКодирования);
	ЗаписьТекста.Закрыть();
	ЗакодированнаяСтрока = Base64Строка(Новый ДвоичныеДанные(ИмяОченьВременногоФайла));
	
	Попытка
		УдалитьФайлы(ИмяОченьВременногоФайла);
	Исключение
		Возврат СтрокаКодирования;
	КонецПопытки;
	
	Возврат ЗакодированнаяСтрока;
	
КонецФункции

Обращение к приведенной выше функции происходит в процедуре, в которой требуется авторизация для объекта WinHttpRequest:

Процедура ЗапросНаУдаление()
	
	//Только для удаления вагона надо воспользоваться сторонними механизмами,
	//т.к. методы PUT и DELETE не поддерживаются объектом HTTPСоединение
	
	WinHttpReq = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
	Если WinHttpReq = Неопределено Тогда
		Сообщить("Ошибка создания объекта WinHTTP... Обработка прервана.");
		Возврат;
	КонецЕсли;
	//Скриптовальщик = Новый COMОбъект("MSScriptControl.ScriptControl");
	//Если Скриптовальщик = Неопределено Тогда
	//	Сообщить("Ошибка создания объекта MSScriptControl... Обработка прервана.");
	//	Возврат;
	//КонецЕсли;
	//Скриптовальщик.language="javascript";
	//Скриптовальщик.AddObject("WinHttp", WinHttpReq);
	//Скриптовальщик.Eval("WinHttp.Option(2)=1251");
	//Скриптовальщик = Неопределено;
	
	WinHttpReq.Open("DELETE", "http://" + СокрЛП(АдресСервера) + "/" + СокрЛП(АдресРесурса));
	
	WinHttpReq.setRequestHeader("Content-Charset", СокрЛП(Кодировка)); 
	WinHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=" + СокрЛП(Кодировка)); 
	WinHttpReq.SetRequestHeader("Content-Length", СокрЛП(СтрДлина(СокрЛП(СтрокаЗапроса))));
	WinHttpReq.SetRequestHeader("Authorization"," Basic " + Кодировать(СокрЛП(ЛогинНаСервер) + ":" + СокрЛП(ПарольНаСервер)));
	
	ТелоЗапроса = СокрЛП(СтрокаЗапроса);
	WinHttpReq.Send(ТелоЗапроса);
	Статус = WinHttpReq.Status;
	Если Статус = 200 Тогда
		//Все ок, ничего не делаем
	ИначеЕсли Статус = 401 Тогда
		//некорректная авторизация
		Сообщить("Возможно, Вы ввели неправильный логин и (или) пароль. Обработка прервана.");
	ИначеЕсли Статус = 407 Тогда
		//Надо авторизоваться на прокси сервере
		//WinHttpReq.SetProxy();
		//WinHttpReq.SetCredentials("", "", 1);
		Сообщить("Разработчик не предусмотрел использование прокси-сервера. Обработка прервана.");
	КонецЕсли;
	
	Сообщить("" + СокрЛП(WinHttpReq.Status) + "   " + СокрЛП(WinHttpReq.StatusText));
	ТекстОтвета = СокрЛП(WinHttpReq.ResponseText());
	Если НЕ ТекстОтвета = "" Тогда
		Сообщить(WinHttpReq.ResponseText());
	КонецЕсли;
	
	WinHttpReq = Неопределено;
	
КонецПроцедуры
 

Удачи всем в поисках истины!

HTTPСоединение DELETE HTTPСоединение.DELETE() HTTPСоединение.Удалить() WinHttpRequest

См. также

WEB-интеграция Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Функциональное решение для торговли на всех популярных маркетплейсах. Работает со схемами FBO и FBS. Простое в использовании и установке, не вносит изменения в код программы. Существенно упрощает работу с товарным ассортиментом, обработку заказов с площадок, работу с поставками, а также ведение аналитики по продажам и остаткам.

72000 руб.

19.07.2024    1365    52    0    

3

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    17747    49    50    

29

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14142    40    8    

16

Обмен с ГосИС Мастера заполнения WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

3900 руб.

08.11.2017    62961    403    295    

72

ККМ WEB-интеграция Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Универсальный драйвер для фискализации чеков для сервиса Бизнес.РУ. Чеки (https://online-check.business.ru/). Работает с любой кассой, подключенной к сервису, в том числе и без физической кассы (Аренда облачной ККТ в датацентре). Принцип работы аналогичен наличию физической кассы, подключенной к рабочему месту 1С. Фискализация выполняется с любого рабочего места через интернет. Нет ограничений на количество рабочих мест, касс, компьютеров. Поддерживает печать с нескольких рабочих мест на одну кассу. Работает в любой операционной системе (Windows, Linux) и в любом клиенте (Тонкий, Толстый, Web, Мобильный клиент).

6000 руб.

03.06.2021    13839    12    0    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AlX0id 13.09.13 09:03 Сейчас в теме
Плюсик за то, что заставил прочитать, что же делает этот запрос ))
2. Поручик 4691 13.09.13 10:16 Сейчас в теме
3. vld_trade 32 13.09.13 10:42 Сейчас в теме
Если бы эти статьи читали разработчики API, нам бы всем жилось намного легче ;)
Я столкнулся с тем, что "На сервер ДОЛЖЕН приходить DELETE запрос с информацией в теле запроса". Точка.
Даже сейчас, когда механизмы обмена информацией с порталом полностью отлажены, response сервера на мой DELETE request всегда отвечает "200", независимо от того, произведено ли реальное удаление ресурса или он был удален ранее...
4. zfr475 05.12.18 15:46 Сейчас в теме
В моем случае, в Функции Кодировать(), вместо переменной "Кодировка" написал "CESU-8" и заработало! ЮТФ-8 мне не помог. Как я понял, "CESU-8" - это ютф-8 без ВОМ.

Спасибо за статью!
5. rasulmk 2 07.09.23 17:45 Сейчас в теме
HTTPСоединение.ВызватьHTTPМетод("DELETE", ЗапросHTTP);
Оставьте свое сообщение