0

やあ、あなたが愛したすべての人々、私はあなたのために別のものを持っています. 私はdjango、リクエスト、およびGoogleチェックアウトを使用しています。私はxmlをGoogleチェックアウト権に送信するところです。すべてが順調です。requests ライブラリを使用して、POST に入れたくないコンテンツを取得しています。説明させてください。Google は正しい XML ファイルを必要としているので、スキーマからデータ構造を作成するために甘いライブラリを使用しています。だから私のXMLは正しいです。ただし、リクエストはこれをGoogleに送信します。

--178.32.28.118.55290.2265475.1333156904.984.1
Content-Disposition: form-data; name="this.xml"; filename="../xml/this.xml"
Content-Type: application/xml

<?xml version="1.0" ?>
<checkout-shopping-cart xmlns='http://checkout.google.com/schema/2'>
<shopping-cart>
    <item>
        <digital-content>
            <url>/site_media/digitalGoods/Resume.html.pdf</url>
            <description>None Yet</description>
            <display-disposition>OPTIMISTIC</display-disposition>
        </digital-content>
        <item-name>Fire Safety Part 1</item-name>
        <item-description>&lt;p&gt;Pellentesque habitant morbi tristique senectus et   netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
</item-description>
        <unit-price currency="USD">1.500000e+01</unit-price>
        <quantity>1</quantity>
        <merchant-item-id>1</merchant-item-id>
    </item>
</shopping-cart>
<checkout-flow-support>    
<merchant-checkout-flow-support/>
</checkout-flow-support>
</checkout-shopping-cart>
--178.32.28.118.55290.2265475.1333156904.984.1--

私が思う問題は、リクエストがそれらの番号とそれらのヘッダーを xml の上に置いていることです。それらは 1 つのドキュメントのようです。また、xml の直後にこれらの番号を書き込んでいます。Google統合コンソールから取得したエラーは.

 Error parsing XML; message from parser is: Content is not allowed in prolog.

私の質問は次のとおりです。これをオフにする方法はありますか、リクエストコードを自分でマングルする必要がありますか、それとも何ですか。リクエストで投稿する方法は次のとおりです

#....other code and vars above
sendfile = {'this.xml':open('../xml/this.xml', 'r')}#the file
headers={'Authorization':("Basic %s" % auth),#google specific headers
        'Content-Type':'application/xml; charset=UTF-8',
        'Accept':'application/xml; charset=UTF-8'}
#send POST
r = requests.post(diagnose_turl, files=sendfile,headers=headers, verify=False)
4

1 に答える 1

2

問題は、XML だけでなく content-type ヘッダーも解析しようとしているようで、パーサーは「Content-Disposition」文字列ではなく XML ルート要素を期待しているため、不平を言っています。

次のようなことをすると、これは奇妙です。

response = requests.post(some_url, ...)

response.text にヘッダーを含めることは想定されていません。生の応答を使用している場合は、response.text代わりに切り替えます。

とにかくヘッダーを取得する場合は、最初の空白行 ( \r\n\r\n) の前にあるものをすべて削除してから、パーサーに渡します。

import re
xml = '\n'.join(re.split(r'\r?\n\r?\n', raw_response)[1:])
于 2012-03-31T17:59:48.047 に答える