| 
    
            
         
         | 
    
    
  | 
ошибка 400 bad request при выполнении POST запроса | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Vataeka    
     20.09.23 
            ✎
    10:28 
 | 
         
        Добрый день!
 
        Выполняю запрос в POSTMAN все нормально, такой же запрос переношу в 1С возникает ошибка 400 bad request. Перепробовала разные варианты кодировок, формировать тело запроса через Запись = Новый ЗаписьJSON; ничего не работает. В чем может быть проблема? Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Connection", "keep-alive"); Заголовки.Вставить("Accept", "*/*"); Заголовки.Вставить("Authorization", "Basic " + ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(Пользователь +":" +Пароль))); Попытка ЗащитаСоединения = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровWindows()); HTTP_Соединение = Новый HTTPСоединение(АдресЗапроса,443,,,,,ЗащитаСоединения); ЗапросHTTP = Новый HTTPЗапрос(ИмяМетода,Заголовки); Исключение Сообщить("Не удалось связаться с сервером"); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Сообщение.Сообщить(); возврат; КонецПопытки; СтрокаJS = "{ | ""request"": { | ""payload"": { | ""request_id"": ""0bde2079-eded-11ea-952d-00155d01aa22"", | ""document_count"": 1, | ""ags_type"": ""02"", | ""legal_basis"": { | ""code"": ""01"", | ""lack_doc_sign"": ""1"" | }, | ""ags_requests"": [ | { | ""fl"": { | ""surname"": ""Иванов"", | | ""name"": ""Иван"", | ""patronymic"": ""Иванович"", | ""birthdate"": ""1996-05-10"", | ""name_changed"": ""1"" | }, | ""doc_id"": ""0bde2079-eded-11ea-952d-00155d01aa21"" | } | ] | } | } |}"; ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаJS,"CESU-8",ИспользованиеByteOrderMark.НеИспользовать); ФайлОтвета = ПолучитьИмяВременногоФайла("json"); HTTP_Соединение.ОтправитьДляОбработки(ЗапросHTTP, ФайлОтвета); //HTTP_Соединение.ВызватьHTTPМетод("POST", ЗапросHTTP, ФайлОтвета); Строка = ЗапросHTTP.ПолучитьТелоКакСтроку(); Ответ = Новый ТекстовыйДокумент(); Ответ.Прочитать(ФайлОтвета, КодировкаТекста.UTF8); ТекстОтвета = Ответ.ПолучитьТекст();  | 
|||
| 
    1
    
        mikecool    
     20.09.23 
            ✎
    10:41 
 | 
         
        проверяй, что в адресе, и что в имени метода     
         | 
|||
| 
    2
    
        Vataeka    
     20.09.23 
            ✎
    10:46 
 | 
         
        я копирую адрес и имя метода из постмана     
         | 
|||
| 
    3
    
        elCust    
     20.09.23 
            ✎
    11:01 
 | 
         
        Необходимо так делать:
 
        Ответ = HTTP_Соединение.ОтправитьДляОбработки(ЗапросHTTP, ФайлОтвета); Строка = Ответ.ПолучитьТелоКакСтроку();  | 
|||
| 
    4
    
        Donkey_hot    
     20.09.23 
            ✎
    11:08 
 | 
         
        (3) Зачем файл ответа, если планируется получать ответ как строку?     
         | 
|||
| 
    5
    
        Donkey_hot    
     20.09.23 
            ✎
    11:08 
 | 
         
        (0) Сам JSON на валидность проверяли?     
         | 
|||
| 
    6
    
        elCust    
     20.09.23 
            ✎
    11:09 
 | 
         
        (4) Скопировал строку ТС.     
         | 
|||
| 
    7
    
        Lite777888    
     naïve 
    20.09.23 
            ✎
    11:12 
 | 
         
        (0) WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
 
        WinHttp.SetRequestHeader("Authorization",КлючАПИ); И тд Попробовать через вин реквест  | 
|||
| 
    8
    
        Vataeka    
     20.09.23 
            ✎
    11:13 
 | 
         
        (3) Сделала без файла ответа, получаю в Строка = "400 Bad Request", в ответ.КодСостояния = 400.     
         | 
|||
| 
    9
    
        Donkey_hot    
     20.09.23 
            ✎
    11:13 
 | 
         
        (6) В любом случае, до получения тела ТСу надо еще дожить, у него код 400, ничего интересного в теле он не найдет.
 
        Мне сильно не нравится, что везде указана куча необязательных параметров. Но поскольку адреса, скопированного из постмана мы не знаем, сказать точнее затруднительно.  | 
|||
| 
    10
    
        Vataeka    
     20.09.23 
            ✎
    11:14 
 | 
         
        (7) Никогда такого не видела, буду пробовать. Только вопрос: а как туда тело запроса засунуть?     
         | 
|||
| 
    11
    
        Donkey_hot    
     20.09.23 
            ✎
    11:14 
 | 
         
        (7) Лет 100 уже такое не использую. Зачем ком, если http внутри платформы?     
         | 
|||
| 
    12
    
        Donkey_hot    
     20.09.23 
            ✎
    11:15 
 | 
         
        (10) Не надо это Вам. Адрес ресурса - это секретная информация?     
         | 
|||
| 
    13
    
        Vataeka    
     20.09.23 
            ✎
    11:15 
 | 
         
        (9) адрес не могу скинуть, заголовки скопированы из постмана, пробовала с разными - результат один.     
         | 
|||
| 
    14
    
        Donkey_hot    
     20.09.23 
            ✎
    11:16 
 | 
         
        (13) Ок, он хотя бы http или https (в постмане)?     
         | 
|||
| 
    15
    
        Vataeka    
     20.09.23 
            ✎
    11:19 
 | 
         
        (14) https     
         | 
|||
| 
    16
    
        Lite777888    
     naïve 
    20.09.23 
            ✎
    11:19 
 | 
         
        WinHttp.Open(ВидЗапроса,"https://" + СерверДляЗапроса + "/"+ Метод + "/" );     
         | 
|||
| 
    17
    
        Lite777888    
     naïve 
    20.09.23 
            ✎
    11:23 
 | 
         
        (11) Не  со всеми апи работает , нттп соединение и запрос как практика показывает     
         | 
|||
| 
    18
    
        Donkey_hot    
     20.09.23 
            ✎
    11:25 
 | 
         
        Ну если мы все-таки занимаемся лечением даже не по фотографии, а без нее, то я бы попробовал для начала:
 
        1) убрать всякий хлам из конструкторов (типа Новый Сертификаты...., порта 443, CESU-8, ByteOrderMark и прочего) 2) в заголовках оставить только Content-type (и Authorization, если он действительно необходим, но скопировать значение в явном виде из постмана) 3) Проверить-таки ваш JSON в любом валидаторе 4) Убедиться, что правильно указали секретный адрес(Хост должен быть без указания протокола и слэшей, например "www.example.ru", а ресурс, наоборот, начинаться и, чаще всего, заканчиваться, слэшем, например "/api/my_method/"  | 
|||
| 
    19
    
        Donkey_hot    
     20.09.23 
            ✎
    11:27 
 | 
         
        (17) Не сталкивался, хотя интеграций сделал достаточно много. Думаю, в данном кейсе проблема не в этом.     
         | 
|||
| 
    20
    
        Donkey_hot    
     20.09.23 
            ✎
    11:29 
 | 
         
        (18) Еще момент, постман и клиент/сервер с которого отправляете запрос на одной машине?     
         | 
|||
| 
    21
    
        mikecool    
     20.09.23 
            ✎
    11:57 
 | 
         
        как выглядит адрес в 1с?     
         | 
|||
| 
    22
    
        Donkey_hot    
     20.09.23 
            ✎
    12:00 
 | 
         
        (21) Сие тайна...     
         | 
|||
| 
    23
    
        Garykom    
     гуру 
    20.09.23 
            ✎
    12:16 
 | 
         
        АдресЗапроса - имя сервера без http:// ?
 
        ИмяМетода - начинается с / ?  | 
|||
| 
    24
    
        Lite777888    
     naïve 
    20.09.23 
            ✎
    12:27 
 | 
         
        (23) адрес типа Сайт.ру ,метод =имя Метода     
         | 
|||
| 
    25
    
        Lite777888    
     naïve 
    20.09.23 
            ✎
    12:29 
 | 
         
        ВидЗапроса -"GET"  "POST"     
         | 
|||
| 
    26
    
        Vataeka    
     20.09.23 
            ✎
    13:50 
 | 
         
        (16) Спасибо Вам огромное! Благодаря вашему совету получила вменяемый ответ! У меня есть еще вопросы: что делать с этим Ком объектом, его нужно как-то закрывать?     
         | 
|||
| 
    27
    
        Vataeka    
     20.09.23 
            ✎
    14:05 
 | 
         
        Еще мне нужно скачать логи запроса, тут я уже использую "GET" и другой метод. Как это сделать через COM?
 
        Вот, что нашла если средствами платформы пользоваться: Соединение = Новый HTTPСоединение("static.1c.ru"); Запрос = Новый HTTPЗапрос("/images/logo.png"); ПутьДляСохранения = "C:\1.png"; //записываем на диск, так Ответ = Соединение.Получить(Запрос, ПутьДляСохранения);  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |