|   |   | 
| 
 | Отправка JSON-строк HTTP запросом в обычных формах | ☑ | ||
|---|---|---|---|---|
| 0
    
        Saari naïve 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 naïve 07.12.22✎ 13:39 | 
        (1) на УФ функция выполняется на сервере. В обычных формах я не указываю где выполняться функции.
 Отладчиком проходил на обоих формах: сама строка JSON одинаково сформирована. Результат.КодСостояния = 200 Как понять, что сам запрос проходит? Далее код такой: ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку()); Пока ЧтениеJson.Прочитать() Цикл КонецЦикла; И в этом цикле у JSON есть параметр result, значение которого на УФ - все нормально, а на обычных формах - error. | |||
| 3
    
        mikecool 07.12.22✎ 13:39 | 
        если ответ - это ответ хттп-сервера, то все равно на какой стороне выполнять - неверный запрос     | |||
| 4
    
        Saari naïve 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 naïve 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 naïve 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 naïve 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 naïve 07.12.22✎ 14:19 | 
        Изменил строку (как было см. выше):
 HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.ANSI, ИспользованиеByteOrderMark.Авто); И все получилось! Спасибо вам всем! | |||
| 18
    
        Saari naïve 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) как я понимаю УстановитьСтроку - это частный случай, позволяющий читать конкретную строку и работать с ней. ОткрытьПоток/Файл - это уже работа с целым файлом.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |