I am trying to take my Flask application to production with gevent WSGIServer
if __name__ == "__main__":
app_host = "0.0.0.0"
app_port = "8080"
#app.run(host=app_host, port=app_port, debug=False)
http_server = WSGIServer((app_host, app_port), app)
logging.info("Starting the App server")
http_server.serve_forever()
I am running the app server with gevent WSGIServer
. Whenever I am trying to fetch any data like
token = request.headers["access_token"]
Receiving the following error
File "app.py", line 62, in post
token = request.headers["access_token"]
File "/home/shravan40/.local/lib/python3.6/site-packages/werkzeug/datastructures.py", line 1463, in __getitem__
return _unicodify_header_value(self.environ["HTTP_" + key])
KeyError: 'HTTP_ACCESS_TOKEN'
2020-08-03T18:01:31Z {'REMOTE_ADDR': '::ffff:127.0.0.1', 'REMOTE_PORT': '55088', 'HTTP_HOST': '127.0.0.1:8080', (hidden keys: 26)} failed with KeyError
pywsgi
has something called SecureEnviron
. This is intended to keep potentially sensitive information like HTTP authorization and cookies from being inadvertently printed or logged.
One can read more at the official documentation
Since I was passing access_token
as key in the headers and trying to access the same from the code, it was raising KeyError: 'HTTP_ACCESS_TOKEN'
because wasn't part of whitelist_keys
.
I used Authorization
as header key and it worked like charm. The same can be done by adding access_token
into the whitelist_keys
.