Я пытаюсь сделать недействительными некоторые объекты, загруженные в Amazon CloudFront, с помощью их API для аннулирования.
Согласно их документации, я отправляю запрос POST с XML-документом в качестве содержимого. В документе XML указаны пути для аннулирования.
Ошибка, которую я получаю от Amazon:
<Error>
<Type>Sender</Type>
<Code>MalformedInput</Code>
<Message>Could not parse XML</Message>
</Error>
Насколько я вижу, мой XML-документ соответствует их документации.
Их документация:
Мой документ XML:
<InvalidationBatch xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/">
<Path>/-o-replace.css</Path>
<Path>/-o-set-link-source.css</Path>
...16 other path elements, each containing only letters, numbers, hyphens and periods
<CallerReference>fixing-accidental-setting-of-gzip-header</CallerReference>
</InvalidationBatch>
Я пытался включить пролог XML, как они это делают в своем ответе, сохраняя и удаляя пробелы и пропуская атрибут xmlns
, но все безрезультатно.
Я отправляю запрос POST вручную, используя Python. Вот код Python, используемый для его отправки. Я подтвердил, что содержимое файла правильно прочитано.
from httplib import HTTPSConnection
from datetime import datetime
from hashlib import sha1
import hmac
conneck = HTTPSConnection('cloudfront.amazonaws.com')
invalidation_file = file('invalidation.xml')
invalidation = unicode(invalidation_file.read()).encode('utf-8')
now_as_string = datetime.now().strftime('%a, %d %b %Y %H:%M:%S GMT')
signature = hmac.new('MY_SECRET_KEY', now_as_string, sha1).digest().encode('base64')
conneck.request('POST', '/2010-11-01/distribution/MY_DISTRIBUTION_ID/invalidation', invalidation, {
'Content-Type': 'text/xml',
'Authorization': 'AWS MY_ACCESS_KEY_ID' + ':' + signature,
'x-amz-date': now_as_string,
})
response = conneck.getresponse()
Кто-нибудь может увидеть, что я делаю не так?