Я новичок в использовании как модуля 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. Буду признателен за любую помощь, которую может предоставить любой. Заранее спасибо!