Предназначенный S3 Scality PUT, работающий в python, но не в Postman или браузере - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь сгенерировать предустановленный PUT с помощью boto3, чтобы загрузить файл в хранилище scality s3 со следующим кодом:

s3_params = dict(service_name='s3',
                         endpoint_url=endpoint,
                         aws_access_key_id=key,
                         aws_secret_access_key=secret,
                         verify=certif_path,
                         config=boto3.session.Config(s3={'addressing_style': 'path'}, signature_version='s3v4'))

self._s3_client = session.client(**s3_params)


self._s3_client.generate_presigned_url(method_name, Params={'Bucket': self.bucket, 'Key': path}, ExpiresIn=3600)

Это на самом деле прекрасно работает при использовании его с запросом:

requests.put(presigned_put_url, open(my_file, 'rb'), verify=certif) # 200

Но как только я пытаюсь использовать сгенерированный URL на Postman или с axios в браузере, я получаю

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>SignatureDoesNotMatch</Code>
    <Message>The request signature we calculated does not match the signature you provided.</Message>
    <Resource></Resource>
    <RequestId>11ecabdb024990d420e5</RequestId>
</Error>

Я попробовал несколько решений, таких как добавление config =boto3.session.Config (s3 = {'addressing_style': 'path'}, signature_version = 's3v4')) в мою конфигурацию s3 или добавление ContentType 'application / octet-stream' при создании URL-адреса и при выполнении запроса. Я пытался обновить версию boto3. Я пытался отключить автоматическое добавление заголовков Postman.

Но я все еще получаю сообщение об ошибке, не понимая, почему.

Спасибо

РЕДАКТИРОВАТЬ

Фактически найден источник ошибки, в нашей конечной точке scality есть номер порта.

При использовании запросов Python или cURL заголовок хоста устанавливается без порта, и запрос работает.

С другой стороны, при использовании XHR или Почтальона заголовок хоста устанавливается с номером порта, и я получаю вышеупомянутое исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...