'HTTP headers is not in the correct format' 使用 Python SDK 创建 Azure 容器时出错

'HTTP headers is not in the correct format' error when creating Azure Container using Python SDK

我正在尝试使用 Python SDK 和以下代码创建 Azure blob 容器。我在响应中收到 'ErrorCode:InvalidHeaderValue'。

我正在使用存储帐户 Azure 门户中 'Access Keys' 部分的 'ConnectionString'。而且我不认为连接是问题,因为这条线工作正常 blob_service_client = BlobServiceClient.from_connection_string(connection_string).

我为此使用了干净的 venv,下面是库版本 蔚蓝核心==1.10.0 天蓝色存储 blob==12.7.1

import os
import yaml
from azure.storage.blob import ContainerClient, BlobServiceClient

def load_config():
    dir_root = os.path.dirname(os.path.abspath(__file__))
    with open (dir_root + "/config.yaml", "r") as yamlfile:
        return yaml.load(yamlfile, Loader=yaml.FullLoader)

config = load_config()
connection_string = config['azure_storage_connectionstring']

blob_service_client = BlobServiceClient.from_connection_string(connection_string)
blob_service_client.create_container('testing')
Traceback (most recent call last):
  File "/Users/anojshrestha/Documents/codes/gen2lake/project_azure/lib/python3.7/site-packages/azure/storage/blob/_container_client.py", line 292, in create_container
    **kwargs)
  File "/Users/anojshrestha/Documents/codes/gen2lake/project_azure/lib/python3.7/site-packages/azure/storage/blob/_generated/operations/_container_operations.py", line 134, in create
    raise HttpResponseError(response=response, model=error)
azure.core.exceptions.HttpResponseError: Operation returned an invalid status 'The value for one of the HTTP headers is not in the correct format.'

During handling of the above exception, another exception occurred:
.......
azure.core.exceptions.HttpResponseError: The value for one of the HTTP headers is not in the correct format.
RequestId:5X-601e-XXXX00ab-5368-f0c05f000000
Time:2021-01-22T02:43:22.3983063Z
ErrorCode:InvalidHeaderValue
Error:None
HeaderName:x-ms-version
HeaderValue:2020-04-08```

如@kopaczew 所述,将 azure_storage_blob 恢复到 12.6.0 版本解决了我的问题。它似乎确实是最新的 azure-storage-blob 库的某种错误。不幸的是,上述问题并不仅限于 create_container 调用。回答我自己的问题,以防这对处于类似情况的其他人有所帮助。

我是如何解决我的问题的:

  1. 删除了我以前的venv环境(重新安装本身导致导入azure库时出现一些问题)

  2. 创建了新的 venv

  3. pip install azure-storage-bob==12.6.0

您不需要重新安装。您可以通过在实例化任何客户端时设置 api_version 变量来解决此问题。

例如:

blob = BlobServiceClient(
    account_url="https://MY_BLOB_STORAGE.blob.core.windows.net",
    credential="MY_PRIMARY_KEY",
    api_version="2019-12-12", #or api_version='2020-02-10'
)

https://github.com/Azure/azure-sdk-for-python/issues/16193