2012-03-31 2 views
0

안녕하세요 여러분 모두가 사람들을 사랑 했으므로 또 하나 있습니다. Django, 요청 및 Google Checkout을 사용하고 있습니다. 나는 구글 체크 아웃 권한에 XML을 보낼 시점에있다. 모두 예외는 아닙니다. 요청 라이브러리를 사용하여 POST에서 원하지 않는 일부 컨텐츠를 얻고 있습니다. 설명하겠습니다. 그래서 Google은 정확한 XML 파일을 원합니다. 스키마에서 데이터 구조를 만들기 위해 달콤한 라이브러리를 사용하고 있습니다. 그래서 내 XML이 정확합니다. 요청은 Google로 전송합니다.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 뒤에 직접 숫자를 쓰고 있습니다. 내 Google 통합 콘솔에서 오류가 발생하기 때문에 이것이 문제라고 생각합니다. 이를 해제 할 수있는 방법이 있나요 내가 요청 코드를 내 자신, 또는 무엇을 난도질해야합니까 :

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

그래서 제 질문입니다. 여기 내가 requets

문제는 당신이 XML뿐만 아니라 구문 분석하려고하는 것 같다
#....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

당신은 또한 당신의 요청을 제출하는 방법의 예를 포함해야한다 : 어쨌든 헤더를 받고있는 경우

는 파서에 공급하기 전에 첫 번째 빈 라인 (\r\n\r\n) 전에 모든 것을 제거하기 – jdi

답변

2

으로 게시,하지만 내용 유형 헤더뿐만 아니라, 그것은 기대로 파서가 불평하고 어떻게 XML 루트 요소이지 "Content-Disposition"문자열이 아닙니다.

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

response.text가 헤더를 포함 안됩니다 : 당신이 뭔가를 할 경우 때문에

이, 이상하다. 원시 응답을 사용하는 경우 대신 response.text으로 전환하십시오.

import re 
xml = '\n'.join(re.split(r'\r?\n\r?\n', raw_response)[1:]) 
+0

맞아요. 응답 해 주셔서 감사합니다. 요청을 편집 할 방법이 있는지 묻습니다. –

+0

@JesusisLord : 내 업데이트 –

+0

응답 주셔서 감사합니다. 서버 (정적 파일)의 xml에 아무 것도 없기 때문에 여전히 요청 모듈과 함께 있다고 생각합니다. 내가 Google에 파일을 POST 할 수 없기 때문에 얻을 생각이 들지 않습니다. –