Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Python请求的XML POST_Python_Xml_Api_Post_Python Requests - Fatal编程技术网

带Python请求的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

我正在尝试使用基于文本对对象进行分类。要与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="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')
和get
AttributeError:\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'})