Necesito eliminar los caracteres de final de línea de las solicitudes entrantes en el matraz. Si la ruta es https://localhost/test\r\n , necesito eliminar \r\n . Esto se debe a un problema de otro programa, que siempre los estaba enviando. Entonces, ¿hay alguna manera de hacer esto más ordenado?
@app.route("/test") @app.route("/test\r\n") def test(): return "TEST"Gracias por adelantado
Podría implementar un middleware WSGI simple que corrija la URL antes de que Flask las procese. Eso podría verse algo como:
from flask import Flask class FixURLMiddleware: def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ["PATH_INFO"] = environ["PATH_INFO"].strip() return self.app(environ, start_response) app = Flask(__name__) app.wsgi_app = FixURLMiddleware(app.wsgi_app) @app.route("/hello") def hello(): return "Hello, world" if __name__ == "__main__": app.run() Para cualquier solicitud entrante, esto llamará al método strip() (que elimina los espacios en blanco, incluidas las líneas nuevas y los retornos de carro, desde el principio y el final de las cadenas) en la ruta antes de que Flask maneje la solicitud.
Puede usar middleware para resolver el problema, ya que puede envolver su aplicación y modificar la entrada y salida antes de la aplicación.
Aquí hay un ejemplo de trabajo de tal:
from flask import Flask app = Flask(__name__) class PathNormaliser: """ Simple WSGI middleware """ def __init__(self, app): self._app = app def __call__(self, environ, start_response): environ['PATH_INFO'] = environ['PATH_INFO'].replace("\\r", "").replace("\\n", "") environ['REQUEST_URI'] = environ['REQUEST_URI'].replace("\\r", "").replace("\\n", "") environ['RAW_URI'] = environ['RAW_URI'].replace("\\r", "").replace("\\n", "") return self._app(environ, start_response) app.wsgi_app = PathNormaliser(app.wsgi_app) @app.route("/") def hello_world(): return "<p>Hello, World!</p>" app.run()Puede leer más sobre esto en un hilo similar a su caso aquí: modifique la URL del matraz antes de enrutar
O bien, puede leer sobre el middleware WSGI aquí: https://flask.palletsprojects.com/en/2.0.x/api/?highlight=middleware#flask.Flask.wsgi_app