使用Python向AWS S3存储桶发出PUT请求

时间:2019-09-27 17:37:45

标签: authentication amazon-s3 python-requests urllib restful-authentication

我正在通过IAM用户帐户使用公用密钥和私有密钥来访问S3存储桶,并且正在使用urllib发出PUT请求;我目前正在尝试使用请求库。但是,最好使用urllib库。它偶尔会给我一个错误消息,而其他时候却什么也没告诉我。有什么办法可以始终告诉我错误是什么,或者这仅仅是亚马逊的工作方式?

我尝试过更改标题,并且我的主机,内容长度,内容MD5,内容类型,用户代理,X-Amz-Content-Sha256,X-Amz-日期,授权字典。这些过多吗?或者我缺少什么?我几乎遵循Amazon在其示例脚本中提供的所有内容。

我注意到的一件有趣的事是,当我将'Expect'标头设置为'100-continue'时,终端会打印出错误,其中部分内容显示:

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 603, in urlopen
    chunked=chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 355, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1244, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1290, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)

这是否意味着请求会自动将我的数据分块?我如何才能不这样做呢?有很多不同的因素,但每次我得到的只是错误400。是否应该为有效负载哈希和md5摘要使用hexdigest()而非digest()?我的有效负载哈希和md5摘要应该是base64编码的吗?是仅在标头中编码而不在签名中编码,还是相反?我不了解问题所在,目前,我只是希望打印出错误消息,以便针对实际问题。

0 个答案:

没有答案