我需要使用python库请求中的PUT请求。 XML必须是String,但是我需要将值作为Int发送。
import requests
bodyXML = """<?xml version='1.0' encoding='utf-8'?><parameters><value>6</value></parameters>"""
bodyHeader = {'Content-Type': 'application/xml'}
p = requests.put('http://test.pt:1891/cash', data=bodyXML, headers=bodyHeader)
答案是:
<?xml version = "1.0" encoding = "UTF-8"?><reply-text>Value must be numeric.</reply-text>
这是程序的答案,所以我可以到达目标并获得响应。
如果我将6更改为“”“ + 6 +”“”,则会收到Python错误
TypeError: must be str, not int
如何将整数伪装成String?
答案 0 :(得分:0)
当您将数据作为HTTP请求主体的一部分发送时,该数据将始终作为字符串发送(从技术上讲,只是字节对字符串进行了编码)。此外,XML是基于文本的格式,因此也必须是字符串。
如果服务器不接受您发送的数据,则应与服务提供商联系,询问他们如何正确格式化数据以便服务器接受。
XML结构可能需要不同的数字格式标记,甚至需要特殊的属性来指定类型。
由于这是针对您的服务的,因此我们将无法为您解答。
答案 1 :(得分:-1)
像程序员一样固执,我找到了一种发送值的方法,因为它们使用lxml构建XML,并在发送XML之前添加字符串“ post_xml =”,效果很好:
import requests
from lxml import etree
root = etree.Element("parameters")
child = etree.SubElement(root, "value")
child.text = str(str(6))
xml = str('post_xml=') + etree.tostring(root, encoding='unicode', method='xml')
p = requests.request("PUT", 'http://test.pt:1891/cash', data=xml)
print(p.text)
服务器将值6接受为整数。
答案 2 :(得分:-2)
轻松地假设您将+6+替换为
bodyXML = """<?xml version='1.0' encoding='utf-8'?><parameters><value>6</value></parameters>"""
6的值。问题是字符串行符号“””在6之前终止。为了解决这个问题,import requests
bodyXML = """<?xml version='1.0' encoding='utf-8'?><parameters><value>”””+”6”+”””</value></parameters>"""
仅通过引号将int转换为字符串,或者将6封装在string()中,例如string(6 )。