Неверный ответ http.server на python3 (Почтальон и другие инструменты) - PullRequest
1 голос
/ 12 мая 2019

Я настраиваю тестовый сервер с базовой библиотекой Python3 http и использую серверный модуль.

Тестируя мой сервер, мне удалось правильно получить и увидеть ответ, используя curl в терминале:

$ curl -H "Content-Type: application/json" -X GET "http://localhost:8080/health"                 
{"health": "ok"}HTTP/1.0 200 OK
Server: BaseHTTP/0.6 Python/3.7.3
Date: Sun, 12 May 2019 19:52:21 GMT
Content-type: application/json

Но если я попытаюсь сделать запрос с помощью таких инструментов, как Почтальон.С этим я получаю сообщение об ошибке Could not get any response (запрос попадает на сервер, и он обрабатывается, я вижу, что в журнале сервер делает).

Есть ли определенный способ, которым я имеюотформатировать мой ответ, который я не вижу в данный момент?Вот как я это делаю:

    def _prepare_response(self):
        self._response_body({'health': 'ok'})
        self.send_response(200)
        self.send_header('Content-type','application/json')
        self.end_headers()

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Если вы посмотрите на вывод curl, это не имеет смысла: «тело» происходит еще до того, как строка состояния будет отправлена.

Вы должны отправить тело ответа после заголовков, а не до. Это означает, что вы должны сначала отправить строку ответа, затем отправить заголовки, затем завершить заголовки и только затем записать в wfile содержимое тела. Поэтому код должен выглядеть примерно так:

 def _prepare_response(self):
        self.send_response(200)
        self.send_header('Content-type','application/json')
        self.end_headers()
        # move what I guess is a helper to after the headers
        self._response_body({'health': 'ok'})

И вы, вероятно, хотите убедиться, что вы должным образом json-сериализуете dict, а не просто передаваете его str и надеетесь, что он JSON-совместим (я не знаю, что делает _response_body).

0 голосов
/ 13 мая 2019

Пожалуйста, укажите вашу конфигурацию почтальона.В противном случае было бы довольно сложно определить, что не так.

Однако: если у вас cURL Call работает хорошо, импортируйте всю команду через Copy & Paste в Postman через Import -> Raw Text и попробуйте, если этот запрос работает.

...