Использование библиотеки Python Requests - PullRequest
0 голосов
/ 31 марта 2012

Привет всем, кого вы любили, у меня есть еще один для вас. Я использую Django, запросы и Google Checkout. Я нахожусь в точке отправки XML в Google Checkout прямо. Все хорошо, КРОМЕ. Используя библиотеку запросов, я получаю контент, который мне не нужен, в 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, как будто они один документ. Также он пишет эти цифры сразу после 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)

1 Ответ

2 голосов
/ 31 марта 2012

Кажется, проблема в том, что вы пытаетесь проанализировать не только XML, но и заголовок типа контента, и анализатор жалуется, поскольку ожидает корневой элемент XML, а не строку «Content-Disposition».

Это странно, потому что если вы делаете что-то вроде:

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:])
...