cURL XML POST可以工作但不能使用Python请求 - 第三方专家评级API(带示例)

时间:2014-04-16 05:36:34

标签: python xml django curl python-requests

我正在尝试发送一个将XML数据发送到第三方服务器的POST请求,它使用cmd line curl而不是python requests library(我需要工作)。我省略了用户名,密码和域名网址。我正在使用请求== 2.2.1

CURL示例(工作):

请求:

$ curl --data '<?xml version="1.0" encoding="UTF-8"?><request><authentication partnerid="12345" password="mypass1234" /><method name="GetTestList" /></request>' 'http://dev.expertrating.com/mydomain/webservices/'

响应:

<response><result name="GetTestList"><records><record test_id="6683" test_name="Demo Adobe Photoshop CS3 Test" coverage="Layers ;Type ;Automating Tasks and Keyboard Shortcuts ;Workspace ;Working with Images, Retouching and Transforming ;Color Management ;Color and Tonal Adjustments ;Using Selection and Drawing ;Filters and Saving Images ;Working With Web, Video and Animation" total_questions="10" duration="10" passing_marks="60" category="Demo Tests" /><record test_id="6684" test_name="Demo Programming with C++ Test" coverage="Classes ;Constructors ;Variables and Datatypes" total_questions="10" duration="10" passing_marks="60" category="Demo Tests" /><record test_id="6685" test_name="Demo HTML 4.01 Test" coverage="Advanced Tags ;Fundamentals ;Tags ;Tables ;Links and Images ;Forms and Frames" total_questions="10" duration="10" passing_marks="60" category="Demo Tests" /><record test_id="6682" test_name="Demo Editing Skills Certification" coverage="Prepositions ;Parallel Construction ;Comma Usage ;Punctuation ;Misplaced Modifiers ;Apostrophe Usage ;Sentence Structure ;Pronoun Usage ;Tenses ;Article Usage" total_questions="10" duration="10" passing_marks="60" category="Demo Tests" /></records></result></response>

请求示例:(失败)(通过ipython / django)

IPython的:

In [1]: import requests

In [2]: payload = '<?xml version="1.0" encoding="UTF-8"?><request><authentication partnerid="12345" password="mypass1234" /><method name="GetTestList" /></request>'

In [3]: r = requests.post('http://dev.expertrating.com/mydomain/webservices/', data=payload, headers={'Content-Type': 'application/xml'})

In [4]: r.text
Out[4]: u"<?xml version='1.0' encoding='UTF-8'?><response><error id='101' message='Invalid Request'><info>You have not posted a valid request.</info></error></response>"

我编码请求字符串错了吗?包括错误的标题?我字面上复制/粘贴了网址和有效负载xml。我也尝试使用urllib2进行POSTing,但结果类似。

非常感谢任何帮助,感谢任何阅读此内容的人。

1 个答案:

答案 0 :(得分:1)

通过将Content-Type标题设置为Content-Type: application/x-www-form-urlencoded而不是Content-Type: application/xml来实现效果。