Имя: Пароль:
1C
1С v8
HTTP-Запрос обрезает тело запроса ЕГАИС
0 Bertruger
 
14.04.17
16:53
Конструкция примерно такая.
ЗапросHTTP = Новый HTTPЗапрос("/opt/in/WayBill", ЗаголовокHTTP);
ЗапросHTTP.УстановитьТелоИзСтроки(Body,"UTF-8");
ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP);

В Body, большая накладная. При выполнении дает 500 ошибку, поставил httpAnalyzer, он мне показал что текст Body, обрезан примерно в половину.
Кладу в Body маленький запрос остатков, всё отрабатывает, статус 200. В httpAnalyzer, запрос остатков не обрезается, т.к. маленький.

Пробовал и так:
ЗапросHTTP.УстановитьИмяФайлаТела(ФайлЗапроса);  //Устанавливает имя файла, из которого будет прочитано тело POST-запроса.
ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеБезBOM(body));
Результат тот же.
У кого какие идеи есть?
1 Юрий Лазаренко
 
14.04.17
17:11
(0) Длинный текст не помещается в переменную Body. Клади текст в текстовый документ, например, и передавай его в запрос через ТекстовыйДокумент.ПолучитьТекст()

ЗапросHTTP.УстановитьТелоИзСтроки(ТекстовыйДокумент.ПолучитьТекст(),"UTF-8");
2 Bertruger
 
14.04.17
17:15
(1) Проверял в отладке, в body текст полный, перед передачей в тело. Но после отправки, httpAnalyzer говорит что текста примерно 50%.
3 Bertruger
 
14.04.17
17:18
При этом если отправлять, через 1с 7.7 (msxml3 или WinHttp.WinHttpRequest.5.1 или curl), то всё уходит, статус 200, httpAnalyzer показывает 100% текста.
А вот через 8 режет.
4 dezss
 
14.04.17
17:29
А что у тебя в ЗаголовокHTTP?
5 Bertruger
 
14.04.17
17:35
(4)
ЗаголовокHTTP = Новый Соответствие();
        ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
        ЗаголовокHTTP.Вставить("Content-Length", XMLСтрока(СтрДлина(Body)));
        ЗаголовокHTTP.Вставить("Connection", "Keep-alive");
6 Неверный Параметр И
 
14.04.17
17:38
Попробуй Content-Length не указывать. Емнип оно само пересчитает правильно.
7 Bertruger
 
14.04.17
17:41
(6) Мерси. Текст в снифер пошел, весь.
8 vladimir80
 
14.04.17
17:48
(5) Я всю жизнь ошибочно полагал, что в Content-Length указывается длина сообщения в байтах, а не в символах...
9 Неверный Параметр И
 
14.04.17
17:55
(8) Конечно ошибочно. Оно же по стандарту в октетах, а не в байтах считается (:
10 vladimir80
 
14.04.17
18:07
(9) Супер ))) Теперь знаю как длину в октетах считать ))))

XMLСтрока(СтрДлина(Body))

=)
11 oleg_km
 
14.04.17
18:32
(10) Не надо ее вообще считать. ЕЕ 1С само прекрасно считает
12 Неверный Параметр И
 
14.04.17
18:37
(10) Все правильно. По http передается html. Html это подмножество xml. Поэтому XMLСтрока (:
13 oleg_km
 
14.04.17
20:05
(12) http сетевой протокол, html и xml языки разметки. Что общего? Если что: по http вообще можно бинарные данные передавать.
14 Неверный Параметр И
 
14.04.17
20:22
(13) Бинарные данные, да. Наверно здесь даже лучше использовать https. Он со строками лучше работает, буковка "s" в конце говорит о специальной оптимизации для string.
15 Юрий Лазаренко
 
14.04.17
23:21
(14) А не о том, что он "secure"?
16 oleg_km
 
15.04.17
08:11
Он прикалывается
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн