Имя: Пароль:
1C
1C 7.7
v7: Отправка xml post запросом
0 Slim747
 
06.06.18
15:32
Каким образом при помощи winhttp winhttprequest 5.1 отправить файл .xml на веб-сервер? Информация по отправке методом post есть, но нигде не пишут как прикрепить файл. Если кто сталкивался с проблемой, подскажите куда следует копать.
Наверное тема не новая, но информации для решения проблемы так и не нашел.
1 trad
 
06.06.18
15:37
я делаю примерно так

ДокXML = СоздатьОбъект("Msxml2.DOMDocument");
ДокXML.appendChild(ДокXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""));
ДокXML.createElement("элемент");
//и т.д.

Запрос = СоздатьОбъект("Msxml2.ServerXMLHTTP");
Запрос.open("POST", url, 0);
Запрос.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
//прочие заголовки

Запрос.send(ДокXML);

Если Запрос.status = 200 Тогда
    Ответ = Запрос.responseXML;
    //Ответ.save("файл.xml");
    Результат = Ответ.selectSingleNode("//Result");
Иначе
    ТекстОшибки = "Ошибка: " + Запрос.status + " : " + Запрос.statusText;
    Сообщить(ТекстОшибки);
КонецЕсли;
2 Slim747
 
06.06.18
15:47
Насколько я понял, в свойстве объекта ДокXML должна быть запись пути нахождения файла .xml?
3 arsik
 
гуру
06.06.18
15:53
(2) Это объект. Просто загрузи в этот объект свой xml/
4 Ёпрст
 
06.06.18
15:54
(2) просто отправляй текст и всё.. т.е в send пихай текст xml
5 arsik
 
гуру
06.06.18
15:55
+ (3) Типа
ДокXML = СоздатьОбъект("Msxml2.DOMDocument");
ДокXML.Load("C:\data.xml")
6 big
 
06.06.18
17:58
(0) Принципиально использовать WinHTTP? Гораздо шустрее работает cUrl.
7 trad
 
06.06.18
18:12
(4) при больших объемах семера будет падать
8 trad
 
06.06.18
18:23
(2) ДокXML - объект, в него ты можешь загрузить файл методом load, загрузить строку методом loadxml, наполнить руками, создавая и вставляя элементы и атрибуты.
Описание - на сайте MS
Метод send объекта xmlhttp умеет принимать как строку (но у семёрки тут проблемы на больших объемах), так и объект с интерфейсом домдокумента
9 Slim747
 
07.06.18
10:40
Всё получилось!
Использовал Msxml2.DOMDocument и Msxml2.ServerXMLHTTP.
Информация на вебсервере появилась все гуд!
Всем огромное спасибо!
Наверное это единственное место где можно получить подсказку для дальнейших действий.
10 Slim747
 
12.06.18
13:41
Рано радовался(:
Какая то косячина!
В статусе пишет ОК.
А на сервисе не появляется.

Может на самом сервисе косяк.
Код прилагаю
Процедура  ОтправитьPOST()
    Перем url;
    СформироватьХМЛ();
    Сформировать();
    
    ДокXML = СоздатьОбъект("Msxml2.DOMDocument");
    ДокXML.Load("C:\партии сырья.xml");
    
    url = "http://corp.ids.by:81/trace/services/TraceabilityPr.svc/insertTraceabilitySyr?action=1&requestGuid="+ГУИД+"&isinsert=0";;
    Запрос = СоздатьОбъект("Msxml2.ServerXMLHTTP");
    Запрос.open("POST", url, 0);
    Запрос.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");    
    Запрос.setRequestHeader("AuthToken",Ответ);
    Запрос.send(ДокXML);
    
    Если Запрос.status = 200 Тогда
        Ответ = Запрос.responseXML;
    
     //   Результат = Ответ.selectSingleNode("//Result");
        Сообщить(Запрос.status);
        Сообщить(Запрос.statusText);
    Иначе
        ТекстОшибки = "Ошибка: " + Запрос.status + " : " + Запрос.statusText;
        Сообщить(ТекстОшибки);
    КонецЕсли;

КонецПроцедуры
11 Slim747
 
12.06.18
14:15
Метод ДокXML.Load("C:\партии сырья.xml"); возвращает -1.
12 trad
 
13.06.18
10:03
Если ДокXML.parseError.errorCode <> 0 Тогда
   Сообщить("Ошибка разбора " + ДокXML.parseError.reason);
Иначе
   Сообщить("Нет ошибок разбора");
КонецЕсли;
13 Slim747
 
13.06.18
11:27
Разобрался.
Скривил немного файл xml который прописывал в метод Load.
Сам код работает безупречно.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn