|
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");
|
|||
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. Сам код работает безупречно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |