如何发送带有 Python 请求的 XML ElementTree?
How do I send an XML ElementTree with Python Requests?
我想使用 Python 3 Requests 库发送 XML POST 请求。
当我将 XML 正文创建为明文字符串时,我能够 send XML bytes to the server without any issues. However, if I send my request as an ElementTree.Element
,服务器响应错误消息“文件过早结束".
将 XML 写入明文(有效)
import requests
root = """<?xml version = '1.0'?>
<Kronos_WFC version = '1.0'> </Kronos_WFC>"""
headers = {'Content-Type': 'text/xml'}
print(requests.post('http://localhost/wfc/XmlService', data=root, headers=headers)).text
# Output:
# <Kronos_WFC version="1.0" WFCVersion="6.3.13.362" TimeStamp="10/30/2017 12:19PM GMT-04:00"></Kronos_WFC>
使用 ElementTree 构建 XML(失败)
from xml.etree import ElementTree as ET
import requests
root = ET.Element("Kronos_WFC", version="1.0")
headers = {'Content-Type': 'text/xml'}
print(requests.post('http://localhost/wfc/XmlService', data=root, headers=headers)).text
# Output:
# <Kronos_WFC>
# <Response Status="Failure" ErrorCode="-1" Message="Premature end of file.">
# </Response></Kronos_WFC>
当我尝试打印 XML ElementTree 进行调试时,我发现 Python 将其解释为一个对象,而不是可解析的文本。我怀疑这可能是问题的原因。
root = ET.Element("Kronos_WFC", version="1.0")
print(root)
# Output:
# <Element 'Kronos_WFC' at 0x013492D0>
理想情况下,我想使用 ElementTree.Element
构建我的 XML POST 请求,然后使用 Requests 将其发送到 API。
如何使用 Python 请求向服务器发送 XML ElementTree.Element
?
使用 ElementTree.tostring() 创建 xml 的字符串表示形式。
requests.post(
'http://localhost/wfc/XmlService',
data=ET.tostring(root),
headers=headers
)
我想使用 Python 3 Requests 库发送 XML POST 请求。
当我将 XML 正文创建为明文字符串时,我能够 send XML bytes to the server without any issues. However, if I send my request as an ElementTree.Element
,服务器响应错误消息“文件过早结束".
将 XML 写入明文(有效)
import requests
root = """<?xml version = '1.0'?>
<Kronos_WFC version = '1.0'> </Kronos_WFC>"""
headers = {'Content-Type': 'text/xml'}
print(requests.post('http://localhost/wfc/XmlService', data=root, headers=headers)).text
# Output:
# <Kronos_WFC version="1.0" WFCVersion="6.3.13.362" TimeStamp="10/30/2017 12:19PM GMT-04:00"></Kronos_WFC>
使用 ElementTree 构建 XML(失败)
from xml.etree import ElementTree as ET
import requests
root = ET.Element("Kronos_WFC", version="1.0")
headers = {'Content-Type': 'text/xml'}
print(requests.post('http://localhost/wfc/XmlService', data=root, headers=headers)).text
# Output:
# <Kronos_WFC>
# <Response Status="Failure" ErrorCode="-1" Message="Premature end of file.">
# </Response></Kronos_WFC>
当我尝试打印 XML ElementTree 进行调试时,我发现 Python 将其解释为一个对象,而不是可解析的文本。我怀疑这可能是问题的原因。
root = ET.Element("Kronos_WFC", version="1.0")
print(root)
# Output:
# <Element 'Kronos_WFC' at 0x013492D0>
理想情况下,我想使用 ElementTree.Element
构建我的 XML POST 请求,然后使用 Requests 将其发送到 API。
如何使用 Python 请求向服务器发送 XML ElementTree.Element
?
使用 ElementTree.tostring() 创建 xml 的字符串表示形式。
requests.post(
'http://localhost/wfc/XmlService',
data=ET.tostring(root),
headers=headers
)