我正尝试使用以下脚本发布到服务器:
import requests
data = {
'query': 'GetProcess',
'getFrom': '2018-12-06 10:10:10.000',
}
response = requests.post('http://localhost/monitor', data=data)
我找不到确切的位置,但是getFrom
元素中的空格字符已替换为+
:'2018-12-06+10:10:10.000'
这与SQL在我们的服务器上期望的语法不匹配,因此查询失败。
我在这里(https://stackoverflow.com/a/12528097)读到,设置Content-type可能会有所帮助。我尝试了text/html
,text/plain
,application/json
,但似乎没有任何变化。
有趣的是,以下bash命令成功执行:
curl -d 'query=GetProcess&getFrom=2018-12-06 10:10:10.000' localhost/monitor
我正在寻找一种使服务器在标头中接收"getFrom" : "2018-12-06 10:10:10.000"
的方法。
答案 0 :(得分:0)
我找到了一种方法来完成这项工作:我遇到的问题是由于在urlencode
中使用了requests
函数。在requests
文档中,显示了如何使用PreparedRequests
解决此默认行为:http://docs.python-requests.org/en/master/user/advanced/#prepared-requests
从本质上讲,不要使用requests.post()
包装器,而应显式调用函数。这样,您将能够精确控制发送的内容。就我而言,解决方案是:
import requests
data = {
'query': 'GetProcess',
'getFrom': '2018-12-06 10:10:10.000'
}
s = requests.Session()
req = requests.Request('POST', 'http://'+ipAddress+'/monitor', data=data)
prepped = s.prepare_request(req)
prepped.body = prepped.body.replace("+", " ")
response = s.send(prepped)