Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 апр 2024, 11:52

POST запрос с использованием multipart/form-data

Автор Arwen77, 27 авг 2018, 10:01

0 Пользователей и 1 гость просматривают эту тему.

Arwen77

Добрый день!
Необходимо получить данные с веб-сервера с помощью POST-запроса.
Сначала запрос был выполнен следующим образом:
Процедура ПолучитьДанныеССервера()
Сервер       = "АдресСервера";
Пользователь = СтруктураПараметров.Логин;
Пароль       = СтруктураПараметров.Пароль;

Попытка
HTTPСоединение = Новый HTTPСоединение(Сервер,, Пользователь, Пароль);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нет подключения к серверу" +  Сервер);
Отказ = Истина;
КонецПопытки;
Если Не Отказ тогда

ИмяВыходногоФайла = ПолучитьимяВременногоФайла("xml");

api        = "api/apicrm/";
method     = "phonenumber/";
phone      = СтруктураПараметров.НомерТелефона;

ПараметрыЗапроса = api + method + phone;

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

HTTPЗапрос = Новый HTTPЗапрос(ПараметрыЗапроса, ЗаголовокHTTP);
HTTPЗапрос.УстановитьТелоИзСтроки("&login=" + Пользователь + "&password=" + Пароль, КодировкаТекста.UTF8);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос, ИмяВыходногоФайла);

КонецЕсли;

КонецПроцедуры


Для пользователей, у которых пароль состоял из цифр и букв, процедура отрабатывала без ошибок. Но для пользователя, в пароле которого содержится символ "+", выдавалась ошибка. Администраторы сайта посоветовали использовать "multipart/form-data"
Вот текст новой процедуры:

Процедура ПолучитьДанныеССервера()
Сервер       = "АдресСервера";
Пользователь = СтруктураПараметров.Логин;
Пароль       = СтруктураПараметров.Пароль;

Попытка
HTTPСоединение = Новый HTTPСоединение(Сервер,, Пользователь, Пароль);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нет подключения к серверу" +  Сервер);
Отказ = Истина;
КонецПопытки;
Если Не Отказ тогда

ИмяВыходногоФайла = ПолучитьимяВременногоФайла("xml");

api        = "api/apicrm/";
method     = "phonenumber/";
phone      = СтруктураПараметров.НомерТелефона;

ПараметрыЗапроса = api + method + phone;

// подготовим файл с данными для отправки
ФайлЗапроса = ПолучитьимяВременногоФайла("txt");
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");

ЗаписьТекста = Новый ЗаписьТекста(ФайлЗапроса, КодировкаТекста.UTF8);
// параметр "login"
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""login""");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Пользователь);
// параметр "password"
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""password""");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Пароль);

ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--");
ЗаписьТекста.Закрыть();

ФайлОтправки = Новый Файл(ФайлЗапроса);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

// передадим данные на сервер
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data, boundary="+boundary);
ЗаголовокHTTP.Вставить("Content-Lenght", РазмерФайлаОтправки);

HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(ФайлЗапроса, ПараметрыЗапроса, ИмяВыходногоФайла, ЗаголовокHTTP);

КонецЕсли;

КонецПроцедуры


Но в итоге выдается ошибка "При получении данных произошла ошибка: 'Ошибка при передаче параметров' по причине: 'Отсутствует обязятельный параметр login', описание ошибки: 'Запрос не выполнен из-за ошибки при передаче параметров.'"
Подскажите, пож-та, как правильно передать логин и пароль?

Arwen77

Тему можно закрыть. Вопрос решен.

AIFrame

Тут не закрываются темы, это не хэлпдеск с тикет-системой.
Вот захочу и напишу сюда чо-нибудь.
Например, чо бы не заюзать .NET либы в com-обертке? Тысячи их.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск