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