Имя: Пароль:
1C
 
Отправка из 1С 8.1 POST запросов на web-сервер
0 beonsys
 
27.04.11
21:32
Здравствуйте, форумчане.
Возникла необходимость отправки post-запроса из 1С Предприятие 8.1 такого плана:

POST /token HTTP/1.1
Host: oauth.yandex.ru
Content-type: application/x-www-form-urlencoded
Content-Length: <length>

grant_type=authorization_code&client_id=<client_id>&code=<code>

Если кто сталкивался с таким вопросом, помогите пожалуйста советом, уже 2 дня бьюсь, все никак не получается. От сервера приходит ответ, что неверный запрос.

Использовал метод HTTPСоединение..ОтправитьДляОбработки()
1 beonsys
 
27.04.11
22:25
up
2 beonsys
 
28.04.11
02:10
up
3 asady
 
28.04.11
09:47
(0) код в студию
4 beonsys
 
01.05.11
22:49
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
   ИмяФайлаОтправки = ПолучитьИмяВременногоФайла();
   
   Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()),"-","");
   
   ФайлОтправки = Новый ТекстовыйДокумент;
   ФайлОтправки.УстановитьТипФайла(КодировкаТекста.Системная);
   
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   ФайлОтправки.ДобавитьСтроку("Content-Disposition: form-data; name=""submit""" + Символы.ПС);
   ФайлОтправки.ДобавитьСтроку("1");
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   ФайлОтправки.ДобавитьСтроку("Content-Disposition: form-data; name=""grant_type""" + Символы.ПС);
   ФайлОтправки.ДобавитьСтроку("authorization_code");
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   ФайлОтправки.ДобавитьСтроку("Content-Disposition: form-data; name=""client_id""" + Символы.ПС);
   ФайлОтправки.ДобавитьСтроку(Константы.ЯндексИД.Получить());
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   ФайлОтправки.ДобавитьСтроку("Content-Disposition: form-data; name=""code""" + Символы.ПС);
   ФайлОтправки.ДобавитьСтроку(КодПодтверждения);
   ФайлОтправки.ДобавитьСтроку("--" + Boundary);
   
   ФайлОтправки.Записать(ИмяФайлаОтправки,КодировкаТекста.Системная);
   
   ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
   РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
   
   ЗаголовокHTTP = Новый Соответствие();
   ЗаголовокHTTP.Вставить("POST /token HTTP/1.0");
   ЗаголовокHTTP.Вставить("Host", "oauth.yandex.ru");
   ЗаголовокHTTP.Вставить("Content-Type","multipart/form-data; boundary=" + Boundary);
   ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
   
   ИнтернетПрокси = ПроцедурыОбменаССайтом.ПолучитьИнтернетПрокси();

   HTTPСоединение = Новый HTTPСоединение("oauth.yandex.ru",,,,ИнтернетПрокси,Истина);
   
   Попытка
       
       HTTPСоединение.ОтправитьДляОбработки(ИмяФайлаОтправки, "/token", ИмяФайлаОтвета,ЗаголовокHTTP);
       
   Исключение
       
   КонецПопытки;
   
   УдалитьФайлы(ИмяФайлаОтправки);
   
   ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
   
   Если ФайлОтвета.Существует() Тогда
       
       ТекстОтвета = Новый ТекстовыйДокумент();
       ТекстОтвета.Прочитать(ИмяФайлаОтвета);
       
       Если ТекстОтвета.КоличествоСтрок() > 0 Тогда
           
           ОтветСервера = ТекстОтвета.ПолучитьТекст();
           Если ОтветСервера = "{""error"": ""invalid_request""}" Тогда
               
               Сообщить("Ответ сервера: Неверный формат запроса");
               
           ИначеЕсли ОтветСервера = "{""error"": ""invalid_grant""}" Тогда
               
               Сообщить("Ответ сервера: Неверный или просроченный код подтверждения");
               
           ИначеЕсли ОтветСервера = "{""error"": ""unsupported_grant_type""}" Тогда
               
               Сообщить("Ответ сервера: Неверное значение параметра grant_type");
               
           Иначе
               
               НомерПервогоСивола = Найти(ОтветСервера,":")+3;
               Токен = Сред(ОтветСервера,НомерПервогоСивола,32);
               Константы.ЯндексТокен.Установить(Токен);
               Константы.ОкончаниеДействияТокенаЯндекс.Установить(ДобавитьМесяц(ТекущаяДата(),3));
               Предупреждение("Токен успешно получен!");
               УдалитьФайлы(ИмяФайлаОтвета);
           КонецЕсли;
           
       Иначе
           
           Сообщить("Отправка данных на сервер: Получен пустой ответ от вервера");
           Возврат;
           
       КонецЕсли;
       
   КонецЕсли;
5 beonsys
 
01.05.11
22:49
Вот так я решил свой вопрос
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн