Имя: Пароль:
1C
 
Postman возращает 200, а 1с 301.
0 Сметанин
 
13.01.26
10:32
Добрый день!
post запрос отправляю через postman код ответа 200, а через 1с код 301.
Код в 1с:
Заголовки = Новый Соответствие;
    Заголовки.Вставить("Token", "...");  
    Заголовки.Вставить("Content-Type", "application/json");

Сервер = "api.botto.ai";
    SSL_Соединение =
    Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(),
    Новый СертификатыУдостоверяющихЦентровWindows());  
    Соединение = Новый HTTPСоединение(Сервер,,,,,,SSL_Соединение);
    Ресурс = "";    

ИдПроверенного = ...;
    
    //4. Получение результатов
    Структура = Новый Структура;
    Структура.Вставить("method", "communications.bases.contacts.export");
    Парам = Новый Структура;
    Парам.Вставить("id", ИдПроверенного);
    Парам.Вставить("project_id", ...);
    Структура.Вставить("params", Парам);
    
    ТекстJSON = iq_ИнтеграцияСервер_Оптимизация.ПолучитьТекстJSON(Структура, Новый ПараметрыЗаписиJSON());  
    
    HTTPЗапрос = Новый HTTPЗапрос(Ресурс, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(ТекстJSON);    
    
    HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    Если HTTPОтвет.КодСостояния = 200 Тогда  
        Сообщить("Успешно");
    Иначе
        Сообщить(СтрШаблон("Ошибка %1", HTTPОтвет.КодСостояния));
    КонецЕсли;  

Другие запросы на этот же ресурс из 1с отрабатывают успешно
1 Kongo2019
 
13.01.26
10:40
(0) очевидно же настройках хостинга где-то включен редирект
2 Radion
 
13.01.26
10:44
(1) чем отличается запрос 1с от запроса через Postman ?
3 Мультук
 
гуру
13.01.26
10:46
(0)

А если через готовую библиотеку ?

https://github.com/vbondarevsky/Connector
4 Kongo2019
 
13.01.26
10:56
(2)потому что Postman умеет в редикет а 1с нет. Надо типа такого. С рекурсией гонять.
Функция ПолучитьДанныеСURL(URL)
 
 СоединениеHTTP = Новый HTTPСоединение(
 URL, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL()
 );

 ЗапросHTTP = Новый HTTPЗапрос("/");

 РезультатЗапроса = СоединениеHTTP.Получить(ЗапросHTTP);

 Если РезультатЗапроса.КодСостояния = 200 Тогда
 // Запрос выполнен успешно
 Возврат РезультатЗапроса.ПолучитьТелоКакСтроку();
 ИначеЕсли РезультатЗапроса.КодСостояния = 301 Тогда
 // Перенаправление
 НовыйURL = РезультатЗапроса.Заголовки.Получить("Location");
 Сообщить("Ресурс перемещен на: " + НовыйURL);
 // Рекурсивный вызов функции для обработки перенаправления
 Возврат ПолучитьДанныеСURL(НовыйURL);
 Иначе
 // Другие ошибки
 Сообщить("Ошибка: " + РезультатЗапроса.КодСостояния + " " + РезультатЗапроса.ОписаниеСостояния);
 Возврат "";
 КонецЕсли;
 
КонецФункции
5 программистище
 
13.01.26
10:57
// Обрабатываем перенаправление
    Если Результат.КодСостояния >= 300 и Результат.КодСостояния < 400  Тогда
        Сообщить("Код статуса больше 3XX, Перенаправление. Код статуса: " + Результат.КодСостояния);
        Если Результат.КодСостояния = 302 Тогда
            Сообщить("Код статуса 302, Постоянное перенаправление.");
            АдресРесурса = Результат.Заголовки.Получить("Location");
            Если АдресРесурса <> Неопределено Тогда
                Сообщить("Выполняю запрос по новому адресу " + АдресРесурса);
                ВыполнитьHTTPЗапрос(АдресРесурса, ТелоЗапроса, КодПроцедурыОбработчика, СообщатьОРезультате);
            Иначе
                Сообщить("Сервер не сообщил адрес ресурса!");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

вызывает саму себя
6 Сметанин
 
13.01.26
11:01
(4)(5) Спасибо буду пробовать
7 Dedal
 
13.01.26
13:02
https://github.com/vbondarevsky/Connector

Попробуйте готовое, очень хорошее решение.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший