http запрос. передача xml методом POST.

1. TODD22 18 30.07.15 15:58 Сейчас в теме
Здравствуйте.

Пытаюсь отправить запрос.
Вот код:

АдресРесурса = "95.181.65.555:222/main";
   
    ХМЛВзаиморасчеты = ТЗВзаиморасчеты();

    HTTP = Новый HTTPСоединение(,,,,,,);
 
    ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
    ИмяФайлаЗапроса    = ПолучитьИмяВременногоФайла();
 
    СтрокаЗапроса = "func=setbillingstatus&auth_login=login&auth_pass=test&xml="­+ХМЛВзаиморасчеты;
   
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
       
    ТекПоток = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.UTF8);
    ТекПоток.Записать(СтрокаЗапроса);
    ТекПоток.Закрыть();
 
    Попытка
        HTTP.ОтправитьДляОбработки(ИмяФайлаЗапроса, АдресРесурса, ИмяФайлаОтвета, Заголовки); 
    Исключение
        ЗаписьЖурналаРегистрации("Загрузка данных аккаунта", УровеньЖурналаРегистрации.Ошибка, , ,"Ошибка: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат;
    КонецПопытки;
 
    ТекПоток = Новый ЧтениеТекста(ИмяФайлаОтвета);
    ОтветСервера = ТекПоток.Прочитать();
    ТекПоток.Закрыть();
    УдалитьФайлы(ИмяФайлаЗапроса);
    УдалитьФайлы(ИмяФайлаОтвета);
Показать


Запрос доходит до адресата. В теле запроса передаётся xml. Но есть проблема.

До адресата доходит только: <?xml version
В чём может быть проблема?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dj_serega 392 30.07.15 16:07 Сейчас в теме
(1) TODD22,
Я отправляю на обработку xml-ку вот таким образом. Через HTTPЗапрос.
xml большого размера без проблем передаются.

Ниже рабочий код отправки пост'а.
Функция   ВыполнитьHTTPОбработкуНаСервер(HTTPСоединение, ТекстЗапроса, Заголовки, ТелоЗапроса = "")  
	
	HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса, Заголовки);
	
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8");
	
	Попытка
		HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
		Если HTTPОтвет.КодСостояния = 401 Тогда
			// Скорее всего ошибка авторизации
			Возврат "Ошибка авторизации.";
		КонецЕсли;
		Возврат HTTPОтвет;
	Исключение
		// Может быть если нет доступа к серверу или указан корректный адрес подключения
		ВызватьИсключение ОписаниеОшибки();
	КонецПопытки;
	
КонецФункции // ВыполнитьHTTPОбработкуНаСервер
Показать
5. TODD22 18 30.07.15 16:47 Сейчас в теме
(2) dj_serega, А можно весь код? С инициализацией HTTPСоединения и формированием тела запроса.

А то у меня запрос то доходит. Где то в формирование тела проблема....

На принимающей стороне отладчиком смотрят кусок от xml до них доходит. Но дальше парсер считывает содержимое из поле xml до: <?xml version
И падает с ошибкой.
8. dj_serega 392 30.07.15 17:07 Сейчас в теме
(5) TODD22,
В приемнике ожидается 4 параметра.
	HTTPСоединение	= Новый HTTPСоединение(	ОбщиеПроцедурыСервер.ПолучитьЗначение("HTTPСервер",	Истина),
											ОбщиеПроцедурыСервер.ПолучитьЗначение("HTTPПорт",	Истина),
											ОбщиеПроцедурыСервер.ПолучитьЗначение("HTTPЛогин",	Истина),
											ОбщиеПроцедурыСервер.ПолучитьЗначение("HTTPПароль",	Истина));
	
	ПрефиксЗапроса = ОбщиеПроцедурыСервер.ПолучитьЗначение("HTTPАдрес",	Истина);
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-type",	"text/plain; charset=" + "UTF-8");
	Заголовки.Вставить("Version",		ОбщиеПроцедурыСервер.ПолучитьЗначение("Version"));
	
	ТекстЗапроса =			ПрефиксЗапроса // Адрес БД
					+ "/" + ПризнакДействия // Строка - параметр 1
					+ "/" + ТипОбработки // Строка - параметр 2
					+ "/" + HTTPОбщиеПроцедуры.ВернутьXMLСтроку(глПолучитьЗначение("ТекущийСотрудник"))  // Строка - параметр 3
					+ "/" + "Дозагрузка"; // Строка - параметр 4
	
//	ДополнительныеДанные = Тут xml
	HTTPОтвет = ВыполнитьHTTPОбработкуНаСервер(HTTPСоединение, ТекстЗапроса, Заголовки, ДополнительныеДанные);

Показать
hlamovnic; +1 Ответить
3. Serginio 938 30.07.15 16:15 Сейчас в теме
Попробуй
Content-Type: application/soap+xml; charset=utf-8
или
Content-Type: text/xml; charset=utf-8
4. TODD22 18 30.07.15 16:35 Сейчас в теме
(3) Serginio,
application/soap+xml; charset=utf-8


Вот так?

Заголовки.Вставить("Content-Type", "application/soap+xml; charset=utf-8");

Или charset=utf-8 куда то в другое место?
6. Serginio 938 30.07.15 16:52 Сейчас в теме
http://www.forum.mista.ru/topic.php?id=681474#20

Заголовки.Вставить("Content-type", "application/xml");
7. dj_serega 392 30.07.15 17:01 Сейчас в теме
(6) Serginio, Я там вставлял даже белиберду. И Content-type не влиял :)
Обмен 1С<->1С.
9. Serginio 938 30.07.15 17:18 Сейчас в теме
Попробуй без файла

HTTPЗапрос.УстановитьТелоИзСтроки(ТекстДляОтправки);
    Результат =  HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);

Ответ = Результат.ПолучитьТелоКакСтроку("UTF-8");
10. Serginio 938 30.07.15 17:24 Сейчас в теме
А ХМЛВзаиморасчеты разве не надо кодировать?
11. TODD22 18 30.07.15 17:29 Сейчас в теме
(10) Serginio, Не знаю. А как кодировать?

Вот текст xml который содержится в переменной ХМЛВзаиморасчеты:

<?xml version="1.0"?>
<root>
<item inn="9999999999" balans="-5000"/>
</root>
13. TODD22 18 30.07.15 17:51 Сейчас в теме
(12) Serginio, То есть его нужно перевести? Только xml или всю строку вместе с логином, паролем и тд?
14. TODD22 18 30.07.15 17:52 Сейчас в теме
Столько примеров находил и нигде в url encode не перекодировали....
15. Serginio 938 30.07.15 17:54 Сейчас в теме
Нет только XML
А вообще посмотри повнимательнее примеры для этого HTTP сервиса.
16. TODD22 18 30.07.15 18:14 Сейчас в теме
(15) Serginio, Попробую... теперь уже завтра. На принимающей стороне все по домам разошлись... :(
17. TODD22 18 30.07.15 18:37 Сейчас в теме
Если в браузере посылаю запрос то его браузер преобразует:

Может в этом дело? Может надо так же преобразовать?
Прикрепленные файлы:
elesina.elizaveta@yandex.ru; +1 Ответить
18. TODD22 18 31.07.15 05:59 Сейчас в теме
В общем на той стороне посмотрели что приходит... и приходит вот что:

"xml=<?xml version=\"1.0\"?><root><item inn=\"777777777\" balans=\"-5000\"/></root>

Как это победить?
Получается неэкранированное равно и парсер запинается....
19. TODD22 18 31.07.15 07:20 Сейчас в теме
(18) TODD22, Вопрос решён. Проблема была на стороне сервера.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот