Имя: Пароль:
1C
 
Не получается простая выгрузка в http - возврат 301
,
0 OlegSham
 
19.04.22
10:34
Прошу помочь советом, не получается простая выгрузка в http - возврат 301
до этого не писал выгрузку в http, поэтому не ругайте.
Взял в качестве примера рабочую выгрузку, которая на работе. И по аналогии сделал.
Но не заработало.
база УПП 8.2, но может работать и под 8.3. Сейчас работаю в ней релизе 8.3.20.1710.

в примере ниже чуть изменил адреса и пароли
Надо по адресу https://api.mindbox.ru/v3/operations/bulk?endpointId=FinAppOffline&operation=DirectCrm.PointsOfContacts.Import&csvCodePage=65001
отправить тело запроса.

ИмяСервера = "api.mindbox.ru";
СсылкаНаРесурс = "/v3/operations/bulk?endpointId=FinAppOffline&operation=DirectCrm.PointsOfContacts.Import&csvCodePage=65001";

Делаю так
Вариант 1.

HTTP = Новый HTTPСоединение(ИмяСервера);
// Получим временный файл для передачи в теле POST запроса
ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
Текст.Записать(ФайлТелаЗапроса, КодировкаТекста.ANSI);
// Получим временный файл — тело ответа POST запроса
ФайлРезультатИсполнения = ПолучитьИмяВременногоФайла();

ЗаголовокЗапросаHTTP = Новый Соответствие();
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Mindbox secretKey=""Y78952UE7a5S""");
ЗаголовокЗапросаHTTP.Вставить("Accept","application/json");
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/csv;charset=utf-8");

Ответ = HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультатИсполнения, ЗаголовокЗапросаHTTP);
КодСостояния = Ответ.КодСостояния;    // возвращает 301

Вариант 2.

HTTP = Новый HTTPСоединение(ИмяСервера);
HTTPЗапрос = Новый HTTPЗапрос(СсылкаНаРесурс);
HTTPЗапрос.УстановитьИмяФайлаТела(ФайлТелаЗапроса);
Ответ  = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
КодСостояния = Ответ.КодСостояния;    // возвращает 301

Удалось установить, что пароль не влияет.
Т.е. еще до авторизации неверно.
Возможно, что надо передать как https - но не могу поставить как в справке - не работает.
HTTP = Новый HTTPСоединение(ИмяСервера,,,,Истина);

Как проверить и протестировать ?
1 OlegSham
 
19.04.22
10:35
В дополнение.
Я не понял - в рабочем примере описано 4 параметра  в ОтправитьДляОбработки:
HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультатИсполнения, ЗаголовокЗапросаHTTP);

А в справке - только 2 там - ФайлТелаЗапроса, СсылкаНаРесурс

Как такое ?
2 arsik
 
гуру
19.04.22
10:37
(1) Посмотри, что у тебя в ответе. Там должна быть ссылка новая, возможно на твой загруженный файл.
3 p-soft
 
19.04.22
10:37
ЗащищенноеСоединение = Неопределено;
Если Протокол = "https" Тогда
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
            
    Если НЕ ПортУказан Тогда
        Порт = 443;
    КонецЕсли;
КонецЕсли;

Попытка
    service = Новый HTTPСоединение(Сервер,Порт,name, psswrd,,Таймаут,ЗащищенноеСоединение);
и т.п..
4 OlegSham
 
19.04.22
10:46
(2)Посмотрел ответ.
Там все верно:
location =  "https://api.mindbox.ru/v3/operations/bulk?endpointId=FinAppOffline&operation=DirectCrm.PointsOfContacts.Import&csvCodePage=65001"

т.е. по умолчанию через https
5 OlegSham
 
19.04.22
10:47
(3)т.е. мне поменять порт ? не понял
6 arsik
 
гуру
19.04.22
10:52
(5) Тебе в ответе прилетает, что давай ка ты иди на https, а не на http. Сделай как в (3)
7 arsik
 
гуру
19.04.22
10:54
+(6) HTTP = Новый HTTPСоединение(ИмяСервера,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
8 OlegSham
 
19.04.22
10:55
Спасибо!
Сделал - заработало
HTTP = Новый HTTPСоединение(ИмяСервера,443,,,,,Новый ЗащищенноеСоединениеOpenSSL)

НО! А как сделать для 8.2 ?
Там же нет параметра ЗащищенноеСоединениеOpenSSL
9 OlegSham
 
19.04.22
10:56
т.е. обработка выполняется под 8.3 и 8.2.
Для 8.3 заработало.
Для 8.2 - не знаю как указать Новый ЗащищенноеСоединениеOpenSSL
10 arsik
 
гуру
19.04.22
10:57
(9) Вроде никак. Попробуй просто порт указать 443.
Если не прокатит, тогда нужно будет с сервера скачивать сертификат, добавлять его в валидные для 1С
11 Кир Пластелинин
 
19.04.22
10:59
(9) ну в синтаксис-помощнике посмотрите HTTPСоединение на 8.2. Последний параметр (булево), емнп. ну и про сертификаты не забываем.
12 OlegSham
 
19.04.22
11:06
спасибо, попробую
13 OlegSham
 
19.04.22
11:46
Для работы с 8.2.
Посмотрел справку и описания работы. Написал .
В свойствах пишет - защищенное соединеие, но
HTTP = Новый HTTPСоединение(ИмяСервера,443,,,,Истина);    // порт 443 - для https
    
ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
Текст.Записать(ФайлТелаЗапроса, КодировкаТекста.ANSI);

ФайлРезультатИсполнения = ПолучитьИмяВременногоФайла();
    
ЗаголовокЗапросаHTTP = Новый Соответствие();
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Mindbox secretKey=""YS7852awsXJBCgUE7a5S""");
ЗаголовокЗапросаHTTP.Вставить("Accept","application/json");
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/csv;charset=utf-8");

// возникает ошибка - Ошибка работы с Интернет:  SSL connect error
Ответ = HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультатИсполнения, ЗаголовокЗапросаHTTP);
14 OlegSham
 
19.04.22
11:47
Т.е. после
HTTP = Новый HTTPСоединение(ИмяСервера,443,,,,Истина);    // порт 443 - для https

свойства соединения - защищеное.

А когда вызываю
Ответ = HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультатИсполнения, ЗаголовокЗапросаHTTP);

возникает ошибка - Ошибка работы с Интернет:  SSL connect error
15 OlegSham
 
19.04.22
12:13
Пишут для 8.2

Реализована поддержка протоколов TLS 1.1 и 1.2 в тех случаях, когда в параметрах соединения не указан клиентский сертификат. Протокол SSL v3.0 будет использован только в том случае, если клиентское приложение запускается с параметром командной строки /HttpsForceSSLv3. Во всех остальных случаях протокол SSL v3.0 не используется.
Параметр AllowSSLv3 файла conf.cfg игнорируется.
Объект ИнтернетПочта не поддерживает протокол SSL v3.0.

А как для сервера его пропивать этот параметр ?
т.е. как в файле conf.cfg указать AllowSSLv3 ?
16 arsik
 
гуру
19.04.22
12:28
(15) На вскидку, у тебя 3 варианта
1) https://sync1c.ru/1c-82-https
2) WinHttpRequest
3) stunnel
17 arsik
 
гуру
19.04.22
12:34
+(16) Ах да. Забыл еще один вариант.
4) И конечно микросервис на go :)
18 Кир Пластелинин
 
19.04.22
12:57
(15) антивирус есть? где то попадалось, что он может заблочить.
(16) по первому пункту - там другой текст ошибки был бы.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.