Запросы Python: наличие пробела в заголовке для публикации - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь отправить сообщение на сервер, используя следующий скрипт:

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), что установка типа контента может помочь. Я попытался 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" в заголовке.

1 Ответ

0 голосов
/ 10 декабря 2018

Я нашел способ сделать эту работу: у меня возникла проблема из-за использования функции urlencode, используемой в requests.В документации requests показано, как обойти это поведение по умолчанию, используя PreparedRequests: http://docs.python -requests.org / en / master / user / advanced / # подготовленный-запросы

По сути, вместо использования оболочки 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)
...