|
Отправка JSON-строк HTTP запросом в обычных формах | ☑ | ||
---|---|---|---|---|
0
Saari
07.12.22
✎
13:27
|
Отправляю JSON-строку HTTP запросом.
На управляемых формах все проходит успешно, а в обчных формах приходит ответ: unknown_request Вот код отправления: HTTPСоединение = Новый HTTPСоединение(Сервер); HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json"); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJS); Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Почему в обычных формах результат отрицательный, а в УФ все хорошо? Помогите, пожалуйста, разобраться. |
|||
1
Ryzeman
07.12.22
✎
13:31
|
Ну, как минимум у тебя одно может выполняться на клиенте, другое на сервере. Отладчиком смотрел - параметры запроса и строка идентичны?
+ код ответа HTTP какой? Сам запрос проходит? |
|||
2
Saari
07.12.22
✎
13:39
|
(1) на УФ функция выполняется на сервере. В обычных формах я не указываю где выполняться функции.
Отладчиком проходил на обоих формах: сама строка JSON одинаково сформирована. Результат.КодСостояния = 200 Как понять, что сам запрос проходит? Далее код такой: ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку()); Пока ЧтениеJson.Прочитать() Цикл КонецЦикла; И в этом цикле у JSON есть параметр result, значение которого на УФ - все нормально, а на обычных формах - error. |
|||
3
mikecool
07.12.22
✎
13:39
|
если ответ - это ответ хттп-сервера, то все равно на какой стороне выполнять - неверный запрос
|
|||
4
Saari
07.12.22
✎
13:41
|
(3) в чем состоит запрос? JSON строка на УФ и в обычных формах на вид одинакова. Алгоритм формирования строки одинаков в обеих формах
|
|||
5
Ryzeman
07.12.22
✎
13:42
|
(2) Ты получаешь 200 код - это "успешно", значит запрос проходит. Похоже, разница где-то ещё. Проверь внимательно все переменные параметры запроса, тело, строку посимвольно. Может где то берёшь данные из реквизита или переменной которой на УФ не видно и там неопределено встаёт внезапно.
|
|||
6
Kassern
07.12.22
✎
13:42
|
(2) Если я все правильно понял, то на УФ, у вас запрос выполняется сервером под пользователем службы 1с и используются корневые сертификаты сервера. на ОФ - вы пытаетесь послать запрос под текущим пользователем системы с текущего компа используя его сертификаты.
Попробуйте &НаКлиенте запустить этот запрос на УФ. Такая же ошибка будет? |
|||
7
Saari
07.12.22
✎
13:43
|
(5) думал про это. Проверю еще. Спасибо!
|
|||
8
Kassern
07.12.22
✎
13:44
|
(5) не заметил, что у него результат 200, тогда да, параметры не совпадают, либо тело запроса.
|
|||
9
Ryzeman
07.12.22
✎
13:44
|
(6) тоже вариант, но если при этом они 200-ый код возвращают, то они какие-то конченные)
|
|||
10
Kassern
07.12.22
✎
13:48
|
(2) Проблему это не решит, но для общего развития:
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку()); Пока ЧтениеJson.Прочитать() Цикл КонецЦикла; Это дело можно удобно обойти штатными средствами: ЧтениеJSON=Новый ЧтениеJSON; ЧтениеJSON.ОткрытьПоток(Ответ.ПолучитьТелоКакПоток()); Данные=ПрочитатьJSON(ЧтениеJSON); |
|||
11
Saari
07.12.22
✎
13:52
|
(6) проверил. на УФ сделал все на клиенте, и все прошло успешно! Значит это не зависит от места вызова: на клиенте или на сервере.
|
|||
12
Kassern
07.12.22
✎
13:54
|
(11) Тогда проверяйте параметры, и ловите ваш запрос в Fiddler например.
|
|||
13
Kassern
07.12.22
✎
13:55
|
100% они будут отличаться (запрос с УФ и ОФ) раз у вас результат всегда разный.
|
|||
14
Saari
07.12.22
✎
13:58
|
(12) Извините за глупый вопрос, но... как поймать запрос в Fiddler?
|
|||
15
Kassern
07.12.22
✎
14:00
|
(14) Устанавливаете прогу фидлер и читаете инструкции, в инете их море)
https://habr.com/ru/post/533138/ |
|||
16
Kassern
07.12.22
✎
14:01
|
Ну либо любое другое приложение используйте, которое умеет перехватывать запросы
|
|||
17
Saari
07.12.22
✎
14:19
|
Изменил строку (как было см. выше):
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.ANSI, ИспользованиеByteOrderMark.Авто); И все получилось! Спасибо вам всем! |
|||
18
Saari
07.12.22
✎
14:20
|
А в УФ было так: HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJS);
|
|||
19
ttk
07.12.22
✎
15:35
|
(10) не в тему топика вопрос:
В каких случаях лучше использовать ЧтениеJSON.ОткрытьПоток(Ответ.ПолучитьТелоКакПоток()); а в каких ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); ? |
|||
20
Kassern
07.12.22
✎
15:40
|
(19) как я понимаю УстановитьСтроку - это частный случай, позволяющий читать конкретную строку и работать с ней. ОткрытьПоток/Файл - это уже работа с целым файлом.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |