Python PUT请求,发送int而不是字符串

时间:2018-12-12 17:52:53

标签: python python-3.x python-requests

我需要使用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?

3 个答案:

答案 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 )。