Имя: Пароль:
1C
1С v8
Передача параметров методом POST через "HTTPСоединение"
0 mzelensky
 
10.10.11
11:54
Доброго времени суток!

Есть вебсервер, который обрабатывает запросы и выдает ответы в формате xml:

http://81.95.212.203/WebServer/Service1.asmx

Рассмотрим на примере запрос "ConnectToServer":

http://81.95.212.203/WebServer/Service1.asmx?op=ConnectToServer

Там задается 3 параметра. На тестовой странице эти параметры передаются методом POST. Из 1С-ки я делаю так:

"ФайлСообщения=ПутьКФайлуСообщения;
Файл=Новый Файл(ФайлСообщения);
ЗаголовокСообщения="Content-Type: text/xml"+Символы.ВК+Символы.ПС+
                          "Content-length: "+Формат(Файл.Размер(),"ЧГ=0");
             
ФайлРезультата=ПолучитьИмяВременногоФайла("xml");    
   
Соединение = Новый HTTPСоединение("81.95.212.203");  
Соединение.Post(ФайлСообщения, "/WebServer/Service1.asmx/ConnectToServer", ФайлРезультата, ЗаголовокСообщения);

ЧтениеXML=Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ФайлРезультата);
       
ЧтениеXML.Закрыть();"

Мне сказали, что эти самые параметры нужно прописать в файле "ФайлСообщения", но КАК ИХ ТАМ ПРОПИСАТЬ (подряд, каждый на своей строке, через запятую или как)???
1 mzelensky
 
10.10.11
11:55
уже вроде пробовал по разному, но возникает ошибка - "Ошибка работы с Интернет:  внутренняя ошибка сервера (500). System.InvalidOperationException: Недопустимый формат запроса: text/xml.
  в System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
  в System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
"
2 DEVIce
 
10.10.11
11:57
Кстати тоже озадачиваюсь эти вопросом. Через заголовки не прокатило, через файл тоже не получается.
3 mzelensky
 
10.10.11
11:59
+ сам конект к серверу я реализовал через GET - все прошло нормально, но в этом случае есть ряд ограниченйи на параметры (например логин можно использовать ток на латинице, а post-ом работает и с кирилицей)...
4 sikuda
 
10.10.11
12:05
Чисто с 1С не получилось передавать и принимать нормальные Webservice.(в частности SAP XI). можно попробовать через Request от Microsoft ActiveX.
5 mzelensky
 
10.10.11
12:19
(4) пример работы можно?!
6 mzelensky
 
10.10.11
12:35
fggg
7 Infsams654
 
10.10.11
12:36
Пользуюсь COMОбъект("MSXML2.XMLHTTP").

мHTTPСоединение.open ("POST", мПротокол + Адрес + мРесурсНаСервере + "?mode=file&type=" + ТипДанных +
   "&filename=" + UrlEncode(ИмяФайла),
   Ложь, Логин, Пароль);
мHTTPСоединение.setRequestHeader ("Host", ПолучитьHost(Адрес));
мHTTPСоединение.setRequestHeader ("User-Agent", "Mozilla/5.0");
мHTTPСоединение.setRequestHeader ("Cookie", Cookie.Имя + "=" + Cookie.Cookie);
мHTTPСоединение.setRequestHeader ("Content-Type", "text/plain");
       
мHTTPСоединение.setRequestHeader ("Content-Length", XMLСтрока(СтрДлина(СтрокаТекста)));
   
мHTTPСоединение.send(СтрокаТекста);
   
Ответ = мHTTPСоединение.responseText;
8 mzelensky
 
10.10.11
12:43
(7) замечательно, еще бы знать что означают все эти параметры :(
9 Infsams654
 
10.10.11
12:48
в инете полно инфы
10 dk
 
10.10.11
12:49
сам недавно с пост воевал, но в 7-ке, но по com, поэтому пофиг )

Создание объекта

       глСМССоединение=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
       глСМССоединение.Option(2,"Windows-1251");                  
       глСМССоединение.Open("POST","http://http.mnogosms.com:8000/send/",0);
       глСМССоединение.setRequestHeader("Content-Type","application/x-www-form-urlencoded");


отправка смс

   СтрокаАдреса = "login="+СокрЛП(Константа.СМСЛогин)+"&password="+СокрЛП(Константа.СМСПароль)+"&msisdn="+СокрЛП(Номер)+"&shortcode="+СокрЛП(ОтКого)+"&text="+СокрЛП(Текст)+"&operation=send";
   Ид = "";
   Попытка
       глСМССоединение.Send(СтрокаАдреса);
       Ид = глСМССоединение.ResponseText();
   Исключение
   КонецПопытки;


получение статуса

   СтрокаАдреса = "login="+СокрЛП(Константа.СМСЛогин)+"&password="+СокрЛП(Константа.СМСПароль)+"&operation=status&id="+СокрЛП(Ид);
   
   Статус = "";
   //глСМССоединение.ПолучитьКакСтроку(СтрокаАдреса, Статус);
   Попытка
       глСМССоединение.Send(СтрокаАдреса);
       Статус = глСМССоединение.ResponseText();
   Исключение
   КонецПопытки;
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.