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

时间:2019-05-12 19:57:02

标签: python python-3.x postman artillery

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

2 个答案:

答案 0 :(得分:1)

如果您看一下curl输出,那是没有意义的:“ 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'})

您可能想确保对dict进行json序列化,而不是将其传递给str并希望它与JSON兼容(我不知道_response_body会做什么)。

答案 1 :(得分:0)

请提供您的邮递员配置。否则很难确定出什么问题。

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