|
Отправка XML запроса методом POST | ☑ | ||
---|---|---|---|---|
0
Kondarat
20.09.13
✎
11:06
|
Есть некий ресурс к которому надо обратиться для получения и формирования данных из 1С. Перед работой необходимо пройти авторизацию. Из описания присланного тех. поддержкой: для авторизации необходимо отправить POSTом XML запрос такой структуры:
<?xml version="1.0" encoding="utf-8"?> <Request method="Authorize"> <login>МойЛогин</login> <password>МойПароль</password> </Request> И получить в ответном сообщении ID сессии, необходимой для дальнейшей работы. На любые попытки отправить такой запрос получаю ответ: <?xml version="1.0" encoding="utf-8"?><response><error num="2">Не определен аттрибут "method"</error></response> Здесь код отправки: Логин = "МойЛогин"; Пароль = "МойПароль"; ИмяФайлаЗапроса = "d:\Testxml.xml"; ОбъектЗапись = Новый ЗаписьXML; ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("utf-8", ,Истина,Истина); ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML); ОбъектЗапись.ЗаписатьОбъявлениеXML(); // выводим корневой элемент Request ОбъектЗапись.ЗаписатьНачалоЭлемента("Request"); ОбъектЗапись.ЗаписатьАтрибут("method", "Authorize"); // выводим элемент Логин ОбъектЗапись.ЗаписатьНачалоЭлемента("login"); ОбъектЗапись.ЗаписатьТекст(Логин); ОбъектЗапись.ЗаписатьКонецЭлемента(); // выводим элемент пароль ОбъектЗапись.ЗаписатьНачалоЭлемента("password"); ОбъектЗапись.ЗаписатьТекст(Пароль); ОбъектЗапись.ЗаписатьКонецЭлемента(); // записываем конец для корневого элемента ОбъектЗапись.ЗаписатьКонецЭлемента(); ОбъектЗапись.Закрыть(); HTTPСоединение = новый HTTPСоединение("ххххх-ххх.ххх.ru", 80); ФайлЗапроса = "d:\Request.xml"; ФайлОтвета = "d:\Response.xml"; Заголовки = новый Соответствие; Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=JUSTSOMESCRAPSTRING"); ФайлОтправки = новый ЗаписьТекста; ФайлОтправки.Открыть(ФайлЗапроса, КодировкаТекста.ANSI); ФайлОтправки.ЗаписатьСтроку("--JUSTSOMESCRAPSTRING"); ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""xml""; xml=""" + ИмяФайлаЗапроса + """"); ФайлОтправки.ЗаписатьСтроку("Content-Type: text/plain" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(ОбъектЗапись); ФайлОтправки.ЗаписатьСтроку("--JUSTSOMESCRAPSTRING"); ФайлОтправки.Закрыть(); // Отправим запрос на сервер, и получим ответ Попытка HTTPСоединение.ОтправитьДляОбработки(ФайлЗапроса, "/api/yyyyyyyy", ФайлОтвета, Заголовки); Файл = новый ЧтениеТекста(); Файл.Открыть(ФайлОтвета, КодировкаТекста.UTF8); Ответ = Файл.Прочитать(); Сообщить("Ответ = " + Ответ); Файл.Закрыть(); Исключение Ответ = ОписаниеОшибки(); КонецПопытки; Если кто-то сталкивался с подобной проблемой, можете помочь? |
|||
1
Asmody
20.09.13
✎
11:15
|
Атрибут method — это в твоем запросе в тэге Request.
Может с API что-то не то? |
|||
2
Ёпрст
20.09.13
✎
11:16
|
а че, нормально
|
|||
3
Kondarat
20.09.13
✎
11:18
|
(1) Это мне понятно (про автрибут). Служба поддержки твердит только, что какой-то символ не в UTF-8
|
|||
4
Kondarat
20.09.13
✎
11:18
|
(2) А нормально что?
|
|||
5
viktor_vv
20.09.13
✎
11:20
|
А кирилицы в логине, пароле нету случайно?
|
|||
6
Asmody
20.09.13
✎
11:21
|
А почему у тебя кодировкатекста.ansi?
|
|||
7
Kondarat
20.09.13
✎
11:24
|
(5) Нет. Перебрал все руктями в латинице.
|
|||
8
Ёпрст
20.09.13
✎
11:25
|
я как-то забил на HTTPСоединение , переписал всё на
WinHttp в своё время. |
|||
9
Kondarat
20.09.13
✎
11:26
|
(6) А в какой надо?
|
|||
10
Kondarat
20.09.13
✎
11:28
|
(9) От безисходности... Переписал все на VbScript - ошибка один в один.
|
|||
11
Ёпрст
20.09.13
✎
11:29
|
И это, я не помню ужо, но разве в
HTTPСоединение.ОтправитьДляОбработки( первым параметром не должен быть у тебя ИмяФайлаЗапроса ? |
|||
12
Ёпрст
20.09.13
✎
11:29
|
ты же именно этот xml туда слать должен.
|
|||
13
Asmody
20.09.13
✎
11:31
|
(9) UTF8 какбэ. Да и вообще, внимательно перечитай описание параметров ОтправитьДляОбработки
|
|||
14
Ёпрст
20.09.13
✎
11:31
|
на вот, пособие с примерами
http://help1c.com/faq/view/1298.html |
|||
15
Kondarat
20.09.13
✎
11:32
|
(13) Вот и ответ на UTF-8
Ответ = <?xml version="1.0" encoding="utf-8"?><response><error num="1">Не удалось получить XML методом POST</error></response> |
|||
16
George Wheels
20.09.13
✎
11:33
|
СП
ОтправитьДляОбработки(<Источник>... <Источник> (Обязательный) Тип: Строка ... А тип переменной ФайлЗапроса какой;) |
|||
17
viktor_vv
20.09.13
✎
11:44
|
А что у тебя в файле отправки получается ? Посомтри просмотрщиком.
Я не уверен, но смущает ОбъектЗапись.Закрыть(); а потом ФайлОтправки.ЗаписатьСтроку(ОбъектЗапись); судя по ОбъектЗапись.Закрыть() Завершает запись текста XML. Если производилась запись в файл, то файл закрывается. Если производилась запись в строку, то результирующая строка будет получена в качестве возвращаемого значения метода. Если производилась запись в файл, то метод вернет пустую строку. |
|||
18
viktor_vv
20.09.13
✎
11:45
|
(17)+ У тебя, похоже, в файл отправки нихрена не попадает твой XML.
|
|||
19
viktor_vv
20.09.13
✎
11:55
|
Ну и
ЗаписатьСтроку(<Строка>, <Разделитель>) первый параметр , тип строка, а тут ты туда объект пытаешься писать ФайлОтправки.ЗаписатьСтроку(ОбъектЗапись); |
|||
20
viktor_vv
20.09.13
✎
12:01
|
Попробуй без файла создать XML
ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку("utf-8"); // Запись документа XML ... СтрXML = ЗаписьXML.Закрыть(); ФайлОтправки.ЗаписатьСтроку(СтрXML); |
|||
21
Serginio1
20.09.13
✎
12:46
|
||||
22
Asmody
20.09.13
✎
12:54
|
(21) это к чему тут вообще?
|
|||
23
Serginio1
20.09.13
✎
13:47
|
(22) смотри 2 сообщение
|
|||
24
Serginio1
20.09.13
✎
13:53
|
23 + Я так понимаю нужно только изменить
xmlHttp.setRequestHeader ("Content-type", "application/xhtml+xml; charset=""utf-8"""); |
|||
25
Kondarat
20.09.13
✎
17:25
|
Всем спасибо. В (20) правильный совет.
|
|||
26
oleg_km
20.09.13
✎
20:25
|
(25) А наверное в файле была сигнатура EF
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |