|
Паразитный символ ? при отправке POST запроса | ☑ | ||
---|---|---|---|---|
0
bvb
21.08.19
✎
12:01
|
Отправляю POST запрос с помощью функции
Функция ВыполнитьPOSTЗапрос(ИмяСервера, Порт, Команда, СсылкаНаРесурс) HTTP = Новый HTTPСоединение(ИмяСервера,Порт,,,,60); ФайлЗапроса = ПолучитьИмяВременногоФайла(); ТекстовыйФайл = Новый ТекстовыйДокумент; ТекстовыйФайл.УстановитьТекст(СокрЛП(Команда)); ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8); ФайлРезультата = ПолучитьИмяВременногоФайла(); ЗаголовокHTTP = Новый Соответствие(); //ЗаголовокHTTP.Вставить("Accept-Language", "ru"); //ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8"); //ЗаголовокHTTP.Вставить("Content-Language", "ru"); //ЗаголовокHTTP.Вставить("Content-Charset", "utf-8"); //ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded"); //ЗаголовокHTTP.Вставить("Content-Type", "application/xml"); ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8"); HTTP.ОтправитьДляОбработки(ФайлЗапроса, СсылкаНаРесурс, ФайлРезультата, ЗаголовокHTTP); Ответ = Новый ТекстовыйДокумент(); Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8); ТекстОтвета = Ответ.ПолучитьТекст(); УдалитьФайлы(ФайлЗапроса); УдалитьФайлы(ФайлРезультата); Возврат ТекстОтвета; КонецФункции В на стороне приемника в начале текста возникает паразитный символ ? Ну и прилетает : <result><code>0</code><message>error ORA-31011: сбой разбора XML</message></result> |
|||
1
Cyberhawk
21.08.19
✎
12:04
|
Это тебе карма такая за использование файликов
|
|||
2
Вафель
21.08.19
✎
12:07
|
это бом, а не паразитный символ
|
|||
3
bvb
21.08.19
✎
12:07
|
(1) Знаю
Я тоже против вариант но без файликов вообще возвращает Ошибку 500 Функция ВыполнитьPOSTЗапрос(ИмяСервера, Порт, СтрокаОтправки, СсылкаНаРесурс) Экспорт HTTP = Новый HTTPСоединение(ИмяСервера,Порт,,,,60); ЗаголовокЗапросаHTTP = Новый Соответствие(); ЗаголовокЗапросаHTTP.Вставить("Content-Length",СтрДлина(СтрокаОтправки)); //ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded"); //ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8"); ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/plain;charset=UTF-8"); //HTTPЗапрос = Новый HTTPЗапрос(СсылкаНаРесурс,ЗаголовокЗапросаHTTP); HTTPЗапрос = Новый HTTPЗапрос; HTTPЗапрос.АдресРесурса = СсылкаНаРесурс; HTTPЗапрос.Заголовки = ЗаголовокЗапросаHTTP; HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаОтправки); Возврат HTTP.ОтправитьДляОбработки(HTTPЗапрос).ПолучитьТелоКакСтроку(); КонецФункции |
|||
4
Cyberhawk
21.08.19
✎
12:10
|
Запомни на будущее простое правило: Content-Length никогда вообще не устанавливай в коде.
|
|||
5
palsergeich
21.08.19
✎
12:21
|
ЗаголовокЗапросаHTTP.Вставить("Content-Length",СтрДлина(СтрокаОтправки));
Не надо этого делать, платформа сама вставляет этот заголовок. Я тебе могу даже сказать где ты ошибся) Если символов 1000 то эта штука СтрДлина(СтрокаОтправки) вернёт 1 000, и из-за неразрывного пробела все сломается) Ещё раз повторю, этот заголовок ставится сам м его не надо устанавливать |
|||
6
bvb
21.08.19
✎
12:33
|
Вот вариант :
1. без использования временных файлов 2. без Content-Length 3. Content-Type как Advancer Rest Client (где все ОК) Все равно : <result><code>0</code><message>error ORA-31011: сбой разбора XML</message></result> Функция ВыполнитьPOSTЗапрос(ИмяСервера, Порт, СтрокаОтправки, СсылкаНаРесурс) Экспорт HTTP = Новый HTTPСоединение(ИмяСервера,Порт,,,,60); ЗаголовокЗапросаHTTP = Новый Соответствие(); ЗаголовокЗапросаHTTP.Вставить("Content-Length",СтрДлина(СтрокаОтправки)); //ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded"); //ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8"); ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/plain;charset=UTF-8"); //HTTPЗапрос = Новый HTTPЗапрос(СсылкаНаРесурс,ЗаголовокЗапросаHTTP); HTTPЗапрос = Новый HTTPЗапрос; HTTPЗапрос.АдресРесурса = СсылкаНаРесурс; HTTPЗапрос.Заголовки = ЗаголовокЗапросаHTTP; HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаОтправки); Возврат HTTP.ОтправитьДляОбработки(HTTPЗапрос).ПолучитьТелоКакСтроку(); КонецФункции ЧТО ОН ТВАРЬ ЕЩЕ ХОЧЕТ ? |
|||
7
bvb
21.08.19
✎
12:34
|
Подозреваю что куда то еще нужно впердолить HTTP/1.1
|
|||
8
Вафель
21.08.19
✎
12:53
|
говоришь "без", а в коде есть
|
|||
9
bvb
21.08.19
✎
12:57
|
(8) НЕ нет. Не то скопипастил.
Вот самый лайтовый вариант Функция ВыполнитьPOSTЗапрос(ИмяСервера, Порт, СтрокаОтправки, СсылкаНаРесурс) Экспорт HTTP = Новый HTTPСоединение(ИмяСервера,Порт,,,,60); ЗаголовокЗапросаHTTP = Новый Соответствие(); ЗаголовокЗапросаHTTP.Вставить("Content-Type" , "application/xml"); HTTPЗапрос = Новый HTTPЗапрос(СсылкаНаРесурс,ЗаголовокЗапросаHTTP); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаОтправки); Возврат HTTP.ОтправитьДляОбработки(HTTPЗапрос).ПолучитьТелоКакСтроку(); КонецФункции |
|||
10
Cyberhawk
21.08.19
✎
12:58
|
Покажи скрин ARC где все работает, включая URI
|
|||
11
Cyberhawk
21.08.19
✎
12:58
|
А также отладчик с точкой останова до отправки ПОСТ-запроса с видными значениями всех параметров метода
|
|||
12
trad
21.08.19
✎
13:00
|
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаОтправки,,ИспользованиеByteOrderMark.НеИспользовать);
|
|||
13
bvb
21.08.19
✎
13:03
|
||||
14
Cyberhawk
21.08.19
✎
13:05
|
(13) Ну так может у тебя действительно текст ХМЛ гуано в 1С
|
|||
15
bvb
21.08.19
✎
13:09
|
(12) ЕСТЬ !!!!
<result><code>1</code><message>OK; Load NOMENKLATURA complete. Loaded 1 items.</message></result> Спасибо огромное |
|||
16
Вафель
21.08.19
✎
13:11
|
А я же говорил )))
|
|||
17
bvb
21.08.19
✎
13:16
|
(16) Там похоже вебовец что то еще со своей стороны подшаминаивал.
Но по сути проблема была в Content-Length |
|||
18
bvb
21.08.19
✎
13:19
|
Окончательный вариант функции если кому нужен будет :
Функция ВыполнитьPOSTЗапрос(ИмяСервера, Порт, СтрокаОтправки, СсылкаНаРесурс) Экспорт HTTP = Новый HTTPСоединение(ИмяСервера,Порт,,,,60); ЗаголовокЗапросаHTTP = Новый Соответствие(); ЗаголовокЗапросаHTTP.Вставить("Content-Type" , "application/xml"); HTTPЗапрос = Новый HTTPЗапрос(СсылкаНаРесурс,ЗаголовокЗапросаHTTP); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаОтправки,,ИспользованиеByteOrderMark.НеИспользовать); Возврат HTTP.ОтправитьДляОбработки(HTTPЗапрос).ПолучитьТелоКакСтроку(); КонецФункции |
|||
19
Cyberhawk
21.08.19
✎
13:20
|
(17) Так без третьего параметра "ИспользованиеByteOrderMark.НеИспользовать" тоже работает?
|
|||
20
Garykom
гуру
21.08.19
✎
13:25
|
(12) BOM это классика, в целом есть куча тонкостей в http но они все решаемые обычно
|
|||
21
bvb
21.08.19
✎
14:32
|
(19) нет
|
|||
22
bvb
21.08.19
✎
15:25
|
И таки да :
Всем большое спасибо в помощи по новой для меня теме |
|||
23
Вафель
21.08.19
✎
15:27
|
(17) тебе говорят бом, а ты почему то контент-ленгф
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |