带Python请求的XML POST
我正在尝试使用基于文本对对象进行分类。要与API交互,我需要发出XML POST请求,例如:带Python请求的XML POST,python,xml,api,post,python-requests,Python,Xml,Api,Post,Python Requests,我正在尝试使用基于文本对对象进行分类。要与API交互,我需要发出XML POST请求,例如: <?xml version="1.0" encoding="utf-8" ?> <uclassify xmlns="http://api.uclassify.com/1/RequestSchema" version="1.01"> <writeCalls writeApiKey="YOUR_WRITE_API_KEY_HERE" classifierName="ManO
<?xml version="1.0" encoding="utf-8" ?>
<uclassify xmlns="http://api.uclassify.com/1/RequestSchema" version="1.01">
<writeCalls writeApiKey="YOUR_WRITE_API_KEY_HERE" classifierName="ManOrWoman">
<create id="CreateManOrWoman"/>
</writeCalls>
</uclassify>
不是
请求
方法,而是使用我的代码库中的urllib2
提供了一个真正简单的配方:
import urllib2
from elementtree import ElementTree
def post(url, data, contenttype):
request = urllib2.Request(url, data)
request.add_header('Content-Type', contenttype)
response = urllib2.urlopen(request)
return response.read()
def postxml(url, elem):
data = ElementTree.tostring(elem, encoding='UTF-8')
return post(url, data, 'text/xml')
我怀疑您缺少的是使用
tostring
来转换您命名为root
的ElementTree
元素的,它正在等待字符串XML,请尝试以下操作(使用请求):
有一次,当我不得不做一件类似的事情时,我是这样做的:
requests.post(url, data=xml_string, headers={'Content-Type':'application/xml; charset=UTF-8'})
我尝试了ElementTree.tostring(tree,encoding='UTF-8')
,但出现了一个错误:AttributeError:type对象'ElementTree'没有属性'tostring'
,所以我尝试了xml.etree.ElementTree.tostring(tree,encoding='UTF-8')
和getAttributeError:\u ElementInterface实例没有属性“iter”
。对于您正在使用的导入,我认为您需要ET.tostring
。一定要在根
上调用它,而不是树
;它作用于元素,而不是树。好吧,现在我好像有一堆UTF-8编码的XML元素。我是否仍然执行tree=ElementTree(root)
?因为我刚刚试着用那棵树发帖,结果得到了另一个类型错误:必须转换为缓冲区,而不是ElementTree
。我不相信你需要树
做任何事情,除非你的问题中没有其他代码使用它。顺便说一句,如果您需要从ElementTree
获取元素,请使用getroot
:好的,我尝试仅使用root
元素发布,并得到了r.content的此异常:…可能重复
input_string_xml = ElementTree.tostring(tree, encoding='utf8', method='xml')
param_data = {'xml': input_xml}
output_xml = requests.post("http://api.uclassify.com/", data=param_data)
requests.post(url, data=xml_string, headers={'Content-Type':'application/xml; charset=UTF-8'})