У меня есть (частный) большой двоичный объект в хранилище больших двоичных объектов Azure, который был записан через учетную запись, у которой есть доступ для записи и чтения (он был записан через эту учетную запись terraform). Я пытаюсь получить его через Python (без Azure SDK), но мне не удалось.
Мой запрос выглядит следующим образом:
import datetime
import requests
key = ...
secret = ...
now = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
# the required settings, as per https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob
headers = {'Authorization': 'SharedKey {}:{}'.format(key, secret),
'Date': now,
'x-ms-version': '2018-03-28'
}
storage_account = ...
container = ...
url = 'https://{}.blob.core.windows.net/{}/terraform.tfstate'.format(storage_account, container)
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.text)
Это дает
400
<?xml version="1.0" encoding="utf-8"?><Error>
<Code>OutOfRangeInput</Code><Message>One of the request inputs is out of range.
RequestId:...
Time:...</Message></Error>
Я подтвердил, что этот файл существует (проводник хранилища) и что, когда я обращаюсь к нему через консоль, я получаю тот же URL-адрес, что и выше, но с дополнительными параметрами GET.
Для тех, кто интересуется: причина, по которой я решил не использовать Azure SDK для Python: мне нужно только получить большой двоичный объект, и pip install azure[blob]
добавит 88 зависимостей в проект (IMO недопустимо большое число для таких простая задача).