J'essaie d'invalider certains objets que j'ai téléchargés sur Amazon CloudFront en utilisant leur API d'invalidation.Pourquoi Amazon Web Services ne peut-il pas analyser mon document XML de demande de traitement par lots CloudFront?
Selon leur documentation, j'envoie une requête POST avec un document XML comme contenu. Le document XML spécifie les chemins à invalider.
L'erreur Je reviens d'Amazon est:
<Error>
<Type>Sender</Type>
<Code>MalformedInput</Code>
<Message>Could not parse XML</Message>
</Error>
Pour autant que je peux voir, mon document XML correspond à leur documentation.
Leur documentation:
Mon document 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>
J'ai essayé, y compris le Prolog XML comme ils le font dans leur réponse, en gardant et en supprimant les espaces et en omettant l'attribut xmlns
, le tout sans effet.
J'envoie la requête POST manuellement en utilisant Python. Voici le code Python utilisé pour l'envoyer. J'ai confirmé que le contenu du fichier est correctement lu.
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()
Quelqu'un peut-il voir ce que je fais mal?