python3 http.server 响应无效(邮递员和其他工具)

python3 http.server response is not valid (Postman and other tools)

我正在使用基本 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

但如果我尝试使用 Postman 等工具发出请求。有了这个,我收到了 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()

请提供您的 Postman 配置。否则很难判断哪里出了问题。

但是:如果您的 cURL 调用运行良好,请通过“导入”-->“原始文本”将整个命令通过复制和粘贴导入到 Postman 中,然后尝试此请求是否有效。

如果您查看 curl 输出,它是没有意义的:"body" 发生在状态行发送之前。

您应该在 body headers 之后发送回复,而不是在 headers 之前。这意味着您必须首先发送响应行,然后发送 headers,然后结束 headers,然后才用 body 内容写入 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-serializing 字典,而不是仅仅将它传递给 str 并希望它是 JSON-compatible(我不知道什么 _response_body )。