【发布时间】:2017-03-15 17:03:35
【问题描述】:
我在为 cherrypy.HTTPError 提供自定义响应处理时遇到问题。我希望在响应正文中显示的唯一内容是 JSON 编码的 dict(这是 REST API)。源码好像表明HTTPError.set_response()可以用来修改cherrypy.response对象...引用这个方法中的注释:
修改 cherrypy.response 状态、标题和正文以表示自己。 CherryPy 在内部使用它,但您也可以使用它来创建一个 HTTPError 对象并设置它的输出而不*引发*异常。
我对 HTTPError 进行了子类化,以便为响应提供我自己的正文。我调用基类方法以确保进行任何必要的内务处理。
class APIError(cherrypy.HTTPError):
def __init__(self, err_resp):
super().__init__(status=err_resp['error_code'])
self._api_err_resp = err_resp
def set_response(self):
super().set_response()
response = cherrypy.serving.response
response.body = json.dumps(self._api_err_resp).encode()
我现在可以毫无问题地调用APIError,但我遇到的问题是,一旦出现我的自定义错误,CherryPy Web 服务器大约需要 10-15 秒来响应我的客户端(如果我使用 @ 不会有任何延迟) 987654327@)。我已经跟踪了源代码,但找不到延迟的原因。
任何帮助将不胜感激。
罗伯
【问题讨论】:
-
确实很奇怪。你找到解决办法了吗?
-
我也遇到了同样的问题,时间也是如此。问题是 Content-Length 标头设置不正确;设置的长度是回溯,而不是新消息。使用
response.headers["Content-Length"] = len(json_error_mesage)设置标题(其中json_error_mesage是json.dumps()输出)解决了这个问题。使用返回错误 18 的 CURL 找到它(请参阅 stackoverflow.com/questions/1759956/…)
标签: cherrypy