There is quite an old game (that no longer works) that has to make some API calls in order to be playable. I am creating a Flask mock server to handle those requests, however it turned out that the requests are not compliant with HTTP standard and are malformed. For example: Get /config.php http/1.1 to which flask reports code 400, message Bad request version ('http/1.1'). After searching for various solutions, here is what I tried (and none worked): before_request Python decorator wsgi_app middleware Here is my code: from flask import Flask, request from functools import wraps app = Flask(__name__) class RequestMiddleware: def __init__(self, app): self.app = app def __call__(self, environ, start_response): print('Middleware', environ['REQUEST_METHOD'], environ['SERVER_PROTOCOL']) return self.app(environ, start_response) def RequestDecorator(view): @wraps(view) def decorated(*args, **kwargs): print('Decorator', args, kwargs) return view(*args, **kwargs) return decorated @app.before_request def RequestHook(): print('Before request: url: %s, path: %s' % (request.url, request.path)) app.wsgi_app = RequestMiddleware(app.wsgi_app) @app.route("/config.php", methods=["GET"]) @RequestDecorator def get_config(): return ("{}", 200) Example output: Middleware GET HTTP/1.1 Before request: url: http://localhost/config.php, path: /config.php Decorator () {} "GET /config.php HTTP/1.1" 200 - code 400, message Bad request version ('http/1.1') "Get /config.php http/1.1" 400 - Malformed request is not getting output from any of the solutions. My goal was to intercept the request before it is rejected in order to string replace Get to GET and http/1.1 to HTTP/1.1. Is it even possible? Continue reading...