Использование библиотеки запросов Python

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

person Jesus is Lord    schedule 31.03.2012    source источник
comment
Вы также должны включить пример того, как вы отправляете запрос.   -  person jdi    schedule 31.03.2012


Ответы (1)


Проблема, похоже, заключается в том, что вы пытаетесь проанализировать не только 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:])
person Paulo Scardine    schedule 31.03.2012
comment
Я так понимаю, спасибо за ответ. Я спрашиваю, есть ли способ отредактировать запрос, чтобы этого не делать. - person Jesus is Lord; 31.03.2012
comment
Спасибо за ответ, я все еще думаю, что это что-то с модулем запросов, потому что xml на сервере (статический файл) не имеет ничего подобного. Я не думаю, что get не сработает, потому что мне нужно отправить файл в Google. - person Jesus is Lord; 31.03.2012
comment
Эй, я решил проблему с помощью httplib, если хотите, я расскажу вам, как я это сделал, чтобы вы могли ответить на вопрос, потому что у меня нет представителя, чтобы ответить на мой собственный. В любом случае благодарите человека, и Иисус действительно любит вас. Хорошо, хорошего дня, Пауло. - person Jesus is Lord; 01.04.2012
comment
@JesusisLord: отправить или получить, r.text не должен включать заголовки, поэтому обязательно обращайтесь к xml через r.text, а не r.raw - person Paulo Scardine; 01.04.2012