vbondarevsky / Connector

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
Apache License 2.0
638 stars 207 forks source link

Ошибка GET при S3 подключении. HTTPЗапрос.Тело запроса #119

Closed maximsamokhval closed 1 year ago

maximsamokhval commented 1 year ago

Дано:

Вызываю метод GET


    Аутентификация = Новый Структура;
    Аутентификация.Вставить("Тип", "AWS4-HMAC-SHA256");
    Аутентификация.Вставить("ИдентификаторКлючаДоступа",    s3_ИдентификаторКлючаДоступа); 
    Аутентификация.Вставить("СекретныйКлюч",                s3_СекретныйКлюч);
    Аутентификация.Вставить("Регион",                       s3_Регион);
    Аутентификация.Вставить("Сервис",                       "s3");

    ДополнительныеПараметры     = Новый Структура;              
    ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация);
    URL                     = Хост+"perfmon.pdf";

    HTTPОтвет = inКоннекторHTTP.Get(URL,,ДополнительныеПараметры);

Ожидаю
HTTPОтвет.КодОтвета = 200

Фактический результат HTTPОтвет.КодОтвета = 501


<?xml version="1.0" encoding="UTF-8"?><Error>
<Code>NotImplemented</Code>
<RequestId>tx00000000000003ecdcb1e-0063f4bc9f-58e4b92d-nyc3c</RequestId>
<HostId>58e4b92d-nyc3c-nyc3-zg03</HostId>
</Error>

Место возникновения ошибки

image

До вызова метода ПолучитьТелоКакПоток() HTTPЗапрос.ПолучитьТелоКакСтроку() возвращает значение Неопределено После вызова = "" ( пустая строка)

image

image


ПодготовленныйЗапрос.Заголовки["x-amz-content-sha256"] = 
        ХешированиеДанных(ХешФункция.SHA256, ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток()); 

Ошибка возникает на вызове метода GET и на платформах 8.3.20.*

На платформе 8.3.16.1814 метод отрабатывает корректно

BlizD commented 1 year ago

В Postman метод выполняется? Пришлите скрин

BlizD commented 1 year ago

С S3 уже несколько раз работали и проблем не было. Если в Postman работает, то и в 1с должно

BlizD commented 1 year ago

Посмотрите может помогут примеры кода https://github.com/BlizD/S3_SSL/blob/main/src/CommonModules/s3_API/Ext/Module.bsl

maximsamokhval commented 1 year ago

В Postman метод выполняется? Пришлите скрин

Во вложении пример из Postman

image

Как раз Ваши примеры и взял за основу, но, как я и писал, что проблема в платформе 8.3.20.1549 Если повторить на платформе 8.3.16.1814 проблем нет.

maximsamokhval commented 1 year ago

Я один и тот же код выполняю на разных платформах и получаю разный результат. Библиотека одинаковая, обработка идентична, в Postman работает.

1С:Предприятие 8.3 (8.3.16.1814) image

1С:Предприятие 8.3 (8.3.20.1549) image

Платформа при вызове метода ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток() устанавливает в тело запроса пустую строку ( видно на скрине )

image

Платформа 8.3.16.1814 обрабатывает после этого запрос типа GET нормально и сервер возвращает 200 код, то платформа 8.3.20.1549 при таком же запросе отрабатывает некорректно - сервер возвращает

image

BlizD commented 1 year ago

Ну тогда, скорее всего проблема не в Коннекторе, а в ошибке в платформы. А на последней платформе 1с, ошибка сохраняется?

Попробуйте еще создать S3 на облаке mail.ru - может все таки это особенность Вашего сервера S3, а не платформы 1с или библиотеки.

maximsamokhval commented 1 year ago

Ну тогда, скорее всего проблема не в Коннекторе, а в ошибке в платформы. А на последней платформе 1с, ошибка сохраняется?

Попробуйте еще создать S3 на облаке mail.ru - может все таки это особенность Вашего сервера S3, а не платформы 1с или библиотеки.

Да, я запустил локально minio и все завелось. Видимо digital ocean по другому обрабатывает запросы Тогда это скорее особенность s3 сервера