2012-01-07 4 views
0

無効化APIを使用してAmazon CloudFrontにアップロードしたオブジェクトを無効にしようとしています。Amazon WebサービスでCloudFrontの無効化バッチリクエストXML文書を解析できないのはなぜですか?

ドキュメントごとに、コンテンツとしてXMLドキュメントを含むPOSTリクエストを送信しています。 XML文書は、無効化するパスを指定します。

私は戻ってアマゾンから取得していますエラーは次のとおりです。

<Error> 
    <Type>Sender</Type> 
    <Code>MalformedInput</Code> 
    <Message>Could not parse XML</Message> 
</Error> 

私の知る限り見ることができるように、私のXML文書は、その文書に一致します。

彼らのドキュメント:

私の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> 

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() 

私が間違っていることは誰でも見ることができますか?

答えて

1

ないCF APIと専門家が、私はあなたが間違ったbase64エンコードを行っていると思いますが、一例を参照してください。

>>> 'xyz'.encode('base64') 
'eHl6\n' 
>>> base64.b64encode('xyz') 
'eHl6' 
関連する問題