Python请求:标头中有一个空格用于发布

时间:2018-12-10 13:56:42

标签: python c++ apache header python-requests

我正尝试使用以下脚本发布到服务器:

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/htmltext/plainapplication/json,但似乎没有任何变化。

有趣的是,以下bash命令成功执行: curl -d 'query=GetProcess&getFrom=2018-12-06 10:10:10.000' localhost/monitor

我正在寻找一种使服务器在标头中接收"getFrom" : "2018-12-06 10:10:10.000"的方法。

1 个答案:

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