使用Python SDK时出现Azure存储错误

使用Python SDK时出现Azure存储错误,python,azure,Python,Azure,我已经将Azure SDK for python下载到我的Ubuntu(工具版本0.8.16)。我正在试着运行这个代码 from azure.storage import BlobService blob_service = BlobService(account_name='Real_Name', account_key='Real_Key') blob_service.create_container('mycontainer') blob_service.create_container(

我已经将Azure SDK for python下载到我的Ubuntu(工具版本0.8.16)。我正在试着运行这个代码

from azure.storage import BlobService
blob_service = BlobService(account_name='Real_Name', account_key='Real_Key')
blob_service.create_container('mycontainer')
blob_service.create_container('mycontainer', x_ms_blob_public_access='container') 

blob_service.put_block_blob_from_path(
    'mycontainer',
    'myblob',
    'sunset.png',
    x_ms_blob_content_type='image/png'
)
我已将其保存在Test.py下,并尝试使用

python Test.py
在终端中,我得到了这个错误

Traceback (most recent call last):
  File "Test.py", line 3, in <module>
    blob_service.create_container('mycontainer')
  File "/home/parallels/azure-sdk-for-python/azure/storage/blobservice.py", line 203, in create_container
    _dont_fail_on_exist(ex)
  File "/home/parallels/azure-sdk-for-python/azure/__init__.py", line 525, in _dont_fail_on_exist
    raise error
azure.WindowsAzureError: Unknown error (Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.)
<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:98ce37f9-0001-003f-350e-7d3666000000
Time:2015-03-24T10:07:00.3385327Z</Message><AuthenticationErrorDetail>Request date header too old: 'Tue, 24 Mar 2015 09:06:59 GMT'</AuthenticationErrorDetail></Error>
如何解决这个问题,我做的一切都对吗


如错误中所述,谢谢:

请求日期标题太旧:“2015年3月24日星期二09:06:59 GMT”

如果您的计算机上的日期/时间(UTC)与Azure Storage Server上的日期/时间之间的差异超过15-20分钟(您的计算机的日期/时间落后于Azure的日期/时间),则会出现此错误

更新


本质上,当请求发送到Azure存储服务(例如,创建容器)时,SDK会获取您计算机的本地日期/时间,将其转换为UTC,然后将其与请求一起发送到Azure(作为请求头date或x-ms-date)。收到请求后,Azure存储服务会将此日期/时间与其日期/时间进行比较,如果差异超过15-20分钟(您的时钟落后),Azure存储服务会抛出您收到的错误。这是一种安全措施,以防有人收到您的请求时无法反复重播该请求。

在从睡眠中恢复WSL 2(Windows Subsystem for Linux)会话,然后从bash/zsh命令行使用Azure cli后,由于时钟偏移,我会收到类似的错误。这将固定时钟:

sudo硬件时钟-s-v

请参阅:

因此此
请求日期标题太旧:“2015年3月24日星期二09:06:59 GMT
是我的Azure存储服务器的时间吗?不是。它是您计算机上的时间,单位为GMT/UTC。请看我的最新答案。谢谢!但是有没有办法检查Azure存储时间?没有。但是其中一个响应头包含Azure存储日期/时间值。不确定如何从Python SDK中提取此信息。不过,您只需在此处查看当前GMT时间:并将其与您计算机上的时间进行比较,以查看您计算机的时钟是否确实落后。谢谢您的回答!我在本地遇到了同样的错误,结果我的虚拟机没有随着最近的DST更改而更新,所以我离Azure的时间还有一个小时,无法上传任何内容。