curl --upload-file работает, python запросов .post () нет - PullRequest
0 голосов
/ 08 июля 2020

Я новичок в использовании как модуля curl, так и модуля python запросов, и у меня возникла проблема, которую я не могу решить. Я работаю над руководством по взаимодействию с API, которое предоставляет следующую команду curl для загрузки файла на AWS S3 в качестве шага в процессе отправки информации в их API:

curl --upload-file test.vcf -H 'x-amz-server-side-encryption: aws:kms' '<URL provided by an earlier step>'

I мы пытались преобразовать это в эквивалентную команду python requests, и пришли к следующему:

    file_upload_dict = requests.post(s3_signed_url_dict['preSignedUrl'],
                        files={'file': open(args.file, 'rb')},
                        headers = {'x-amz-server-side-encryption': 'aws:kms'})

, где s3_signed_url_dict['preSignedUrl'] - это URL-адрес, предоставленный на предыдущем этапе взаимодействия с API. . Когда я делаю это, я получаю ошибку 403 и следующее сообщение:

<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

Я проверил как ключ, так и сообщение подписи, как они рекомендуют, заменив запрос .post () в моем python скрипте. с эквивалентной командой curl, которую я опубликовал выше (путем приостановки сценария, чтобы у меня было время вставить заранее подписанный URL-адрес, который они предоставляют, в команду curl), и команда curl работает так, как должна, и выполняется без каких-либо ошибок 403. Мне интересно, что не так с текущим способом структурирования моей команды python requests. Буду признателен за любую помощь, которую может предоставить любой. Заранее спасибо!

...