繁体   English   中英

使用Python请求库

[英]Using Python Requests library

嘿,所有你爱的人,我有另一个给你。 我正在使用django,请求和谷歌结账。 我正准备将xml发送到Google Checkout。 一切都很好。 使用请求库我得到了一些我不希望在POST中的内容。 让我解释。 所以google想要一个正确的XML文件,得到它,我正在使用一个甜蜜的库来从模式中创建数据结构。 所以我的XML是正确的。 请求虽然将此发送给谷歌。

--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之后直接写这些数字。 我认为这是一个问题,因为我从谷歌集成控制台得到的错误是。

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

所以我的问题是:有没有办法解决这个问题,我是否需要破坏我自己的请求代码,或者什么。 这是我如何使用requets进行POST

#....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)

问题似乎是你不仅试图解析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:])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM