Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Отправка xml post запросом

v7: Отправка xml post запросом
Я
   Slim747
 
06.06.18 - 15:32
Каким образом при помощи winhttp winhttprequest 5.1 отправить файл .xml на веб-сервер? Информация по отправке методом post есть, но нигде не пишут как прикрепить файл. Если кто сталкивался с проблемой, подскажите куда следует копать.
Наверное тема не новая, но информации для решения проблемы так и не нашел.
 
 
   trad
 
1 - 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;
    Сообщить(ТекстОшибки);
КонецЕсли;
   Slim747
 
2 - 06.06.18 - 15:47
Насколько я понял, в свойстве объекта ДокXML должна быть запись пути нахождения файла .xml?
   arsik
 
3 - 06.06.18 - 15:53
(2) Это объект. Просто загрузи в этот объект свой xml/
   Ёпрст
 
4 - 06.06.18 - 15:54
(2) просто отправляй текст и всё.. т.е в send пихай текст xml
   arsik
 
5 - 06.06.18 - 15:55
+ (3) Типа
ДокXML = СоздатьОбъект("Msxml2.DOMDocument");
ДокXML.Load("C:\data.xml")

   big
 
6 - 06.06.18 - 17:58
(0) Принципиально использовать WinHTTP? Гораздо шустрее работает cUrl.
   trad
 
7 - 06.06.18 - 18:12
(4) при больших объемах семера будет падать
   trad
 
8 - 06.06.18 - 18:23
(2) ДокXML - объект, в него ты можешь загрузить файл методом load, загрузить строку методом loadxml, наполнить руками, создавая и вставляя элементы и атрибуты.
Описание - на сайте MS
Метод send объекта xmlhttp умеет принимать как строку (но у семёрки тут проблемы на больших объемах), так и объект с интерфейсом домдокумента
   Slim747
 
9 - 07.06.18 - 10:40
Всё получилось!
Использовал Msxml2.DOMDocument и Msxml2.ServerXMLHTTP.
Информация на вебсервере появилась все гуд!
Всем огромное спасибо!
Наверное это единственное место где можно получить подсказку для дальнейших действий.
   Slim747
 
10 - 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;
        Сообщить(ТекстОшибки);
    КонецЕсли;

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует