字段未添加到quart/flask中间件中的标头中



我正在尝试在Flask中间件中记录数据。我使用process_response函数来记录响应数据。

我有一个代码块,试图将持续时间注入响应的头部。但是X-Time-Taken并没有被添加到标头中。响应标头为request header: Content-Type: text/plain; charset=utf-8

为什么X-Time-Taken没有添加到标头中?

仅供参考,我的代码基于这一点,这表明我所做的应该有效。

class SampleWSGI():    
def __init__(self, app, config=None):
self.app = app
self.app_id = config["app_id"]
self.secret_key = config["secret_key"]
def __call__(self, environ, start_response):
request = Request(environ)
resp = Response(start_response)
self._process_response(self.app_id, resp)
apikey = request.args.get("apikey")
if "favicon.ico" in request.path:
return
x = self.authorize_user(apikey=apikey, client_path=request.path)
if x.status_code < 400:
##Injects duration into response time
start_time = datetime.utcnow().timestamp()
def injecting_start_response(status, headers, exc_info=None):
end_time = datetime.utcnow().timestamp()
time_taken = str(end_time - start_time)
headers.append(('X-Time-Taken', time_taken))
return start_response(status, headers, exc_info)

return self.app(environ, injecting_start_response)

res = Response(u'Authorization failed', mimetype= 'text/plain', status=x.status_code)
return res(environ, start_response)
@staticmethod
def _process_response(app_id, response, request):
#req = Request(environ, shallow=True)
print(f'request header: {response.headers}')

尝试以下操作:

class SampleWSGI():    
def __init__(self, app, config=None):
self.app = app
self.app_id = config["app_id"]
self.secret_key = config["secret_key"]
def __call__(self, environ, start_response):
request = Request(environ)
resp = Response(start_response)
# This line changed:
self._process_response(self.app_id, resp, request)
apikey = request.args.get("apikey")
if "favicon.ico" in request.path:
return
x = self.authorize_user(apikey=apikey, client_path=request.path)
if x.status_code < 400:
##Injects duration into response time
start_time = datetime.utcnow().timestamp()
def injecting_start_response(status, headers, exc_info=None):
end_time = datetime.utcnow().timestamp()
time_taken = str(end_time - start_time)
headers.append(('X-Time-Taken', time_taken))
return start_response(status, headers, exc_info)

return self.app(environ, injecting_start_response)

res = Response(u'Authorization failed', mimetype= 'text/plain', status=x.status_code)
return res(environ, start_response)
@staticmethod
def _process_response(app_id, response, request):
#req = Request(environ, shallow=True)
print(f'request header: {response.headers}')

如您所见,您没有将request传递给_process_response()。不幸的是,简单的错误会让一切变得糟糕。。。

最新更新