Параметр в кодировке win-1251(HttpСоединение)

1. bi4ara 01.02.12 12:48 Сейчас в теме
Приамбула:
В сети достаточно много полезных (и не очень) сервисов которые работают через прямые http запросы. В 1С тоже есть инструментарий для подобной работы- это объект HttpСоединение и распространенные методы Post, Get, Put.

Жизненные нюансы:
Платформа 1С Предприятие по умолчанию работает в кодировке Unicode, т.е. все данные хранятся и передаются в этой кодировке. Большинство сервисов поддерживает кодировку win-1251 и unicode неподдерживает. И если в http запросе необходимо передать кирилицу, то соответственно сервис этого "непрожует"

Вопрос:
Каким способом (есть ли он?) можно передать в качестве параметра метода объекта строку в кодировке win-1251?

Пример:

ТекстЗапроса = ""+АдресВебСервиса+""http_username=MyLogin&http_password=MyPassword&SendData=ВасяВасечкин";
Соединение = Новый HTTPСоединение(АдресСервераУслуг);
Соединение.Получить(ТекстЗапроса,ПутьКФайлуРезультата)  

В данном примере сервис в параметре <SendData> получит не <ВасяВасечкин> т.к. строка в unicode кодировке
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. mkostya 30 01.02.12 23:39 Сейчас в теме
3. mkostya 30 01.02.12 23:41 Сейчас в теме
WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"Windows-1251");
WinHttp.Open("POST","https://infostart.ru",0);
// Вторым параметром передаем GET-данные
//param1=value1¶m2=value2"

//WinHttp.SetProxy(0,"192.168.1.1:3128");// Задаем параметры своего прокси сервера
//WinHttp.SetCredentials("ProxyLogin","ProzyPassword",1);
// Задаем параметром логин и пароль
//если прямое соединение то так в коментах и оставлем :)
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");

ПараметрыПОСТ = "isJuridical=1" + "&individualCode="+СокрЛП(Контрагент);

WinHttp.Send(ПараметрыПОСТ);// Параметром передаем POST-данные для страници тут как раз

Дальше или сохраняем страницу в файл
Текст = СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(WinHttp.ResponseText());
Текст.Записать(КаталогИБ() + "otvet.htm");
gradi; bi4ara; +2 Ответить
4. bi4ara 02.02.12 16:41 Сейчас в теме
Спасибо за развернутый пример!
Такой вариант с созданием внешнего win-объекта обдумывался, но что-то очень хотелось сделать средствами платформы. А то например в linux-ах так уже не выйдет. Но пример хороший, рабочий!
5. kuza_87 28 17.12.13 06:29 Сейчас в теме
Стр =Контр.Наименование;
Стрим = Новый COMОбъект("Adodb.Stream");
Стрим.Type = 2;
Стрим.Mode= 3;
Стрим.charset="utf-8";
Стрим.Open();
Стрим.WriteText(Стр);
Стрим.Position=0;
Стрим.charset="windows-1251";
Рез=Стрим.ReadText(-1);
Стрим.Close();
Возврат Рез;
Решение не моё, нашел на каком-то форуме, но работает без проблем
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)