使用python使用auth发布xml数据

时间:2014-12-16 03:21:22

标签: xml http post python-3.x

我有这个xml字符串我想发布到API网址,我一直在检查文档,并想出了类似的东西:

import urllib.request as ur
import urllib.parse as up

auth_handler = ur.HTTPBasicAuthHandler()
auth_handler.add_password(realm='something',
                        uri='http://api/api',
                        user=username,
                        passwd=passw)

opener = ur.build_opener(auth_handler)
opener.addheaders = [('User-agent', 'api-id'), ("Content-Type","applicaiton/xml;charset=utf-8")]

data = up.urlencode(('<?xml version="1.0" encoding="UTF-8"?>'
                "<entry>"
                        "<episode>"+ep_no+"</episode>"
                        "<status></status>"
                        "<score></score>"
                        "<tags></tags>"
                "</entry>"))

bin_data = data.encode('utf-8')
opener.open("http://api/api/add/"+id+".xml", data=bin_data)

但是,我得到了:

...
File "/home/hairo/sandbox/post_test.py", line 124, in post
data = up.urlencode(('<?xml version="1.0" encoding="UTF-8"?>'
...
raise TypeError
TypeError: not a valid non-string sequence or mapping object

看起来我错过了一些明显的东西,但我无法弄清楚它是什么,有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

urlencode的调用仅传递单元素元组。 Here是urlencode使用的参数类型的示例。

&#34;转换映射对象或一系列双元素元组&#34;。