2012-03-31 52 views
0

嘿,你所爱的人,我有另一个给你。 我正在使用django,请求和谷歌结帐。我正在将xml发送给Google checkout的权利。一切都很好,除了。使用请求库,我得到了一些我不想在POST中找到的内容。让我解释。 因此谷歌想要一个正确的XML文件,得到了这一点,我用一个甜美的库来从架构中创建数据结构。所以我的XML是正确的。请求虽然发送到谷歌。使用Python请求库

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

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

你还应该包括你如何提交请求的例子 – jdi 2012-03-31 17:25:41

回答

2

的问题似乎是,你试图解析不仅XML发布,但Content-Type头,以及,解析器抱怨,因为它正期待一个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:]) 
+0

对,我明白了,谢谢你的回应。我在问是否有办法编辑请求不这样做。 – 2012-03-31 18:02:09

+0

@JesusisLord:请参阅我的更新 – 2012-03-31 18:12:17

+0

感谢您的回复,我仍然认为它与Requests模块有关,因为服务器上的xml(静态文件)没有类似的东西。一个get不起作用我不认为,因为我需要将该文件发布到谷歌。 – 2012-03-31 18:30:31