From 6990f15c97ee4dd0757e44708c04a28832227969 Mon Sep 17 00:00:00 2001 From: Anthony Donlon Date: Wed, 19 Nov 2025 22:25:16 +0800 Subject: [PATCH] example: add flask server example --- README.md | 5 +++ examples/flask_server.py | 67 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 examples/flask_server.py diff --git a/README.md b/README.md index 7e8fb2a..2368a95 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,11 @@ params = { ![Web server is working](doc/example2.png) +### Using Flask server + +See [flask_server.py](examples/flask_server.py) + + ## Full Parameter Reference ``` JavaScript { diff --git a/examples/flask_server.py b/examples/flask_server.py new file mode 100644 index 0000000..9152014 --- /dev/null +++ b/examples/flask_server.py @@ -0,0 +1,67 @@ +import os +import sys +from flask import Flask, request, send_from_directory + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from cloudflare_error_page import get_resources_folder, render as render_cf_error_page + +app = Flask(__name__) + +# You can use resources from Cloudflare CDN. But in case of changing, you can set use_cdn = False to use bundled resources. +use_cdn = True + +if use_cdn: + res_folder = get_resources_folder() + + # This handler is used to provide stylesheet and icon resources for the error page. If you pass use_cdn=True to render_cf_error_page + # or if your site is under proxy of Cloudflare (the cdn-cgi folder is already provided by Cloudflare), this handler can be removed. + @app.route("/cdn-cgi/") + def cdn_cgi(path): + return send_from_directory(res_folder, path) + + +@app.route("/") +def index(): + # Get real Ray ID from Cloudflare header + ray_id = request.headers.get('Http-Cf-Ray', '') + + # Get real client ip from Cloudflare header or request.remote_addr + client_ip = request.headers.get('Http-X-Forwarded-For') + if not client_ip: + client_ip = request.remote_addr + + # Render the error page + return render_cf_error_page({ + 'html_title': '500: Internal server error', + 'title': 'Internal server error', + 'error_code': 500, + 'more_information': { + "hidden": False, + "text": "cloudflare.com", + "link": "https://youtube.com/watch?v=dQw4w9WgXcQ", + }, + 'browser_status': { + "status": 'ok', + }, + 'cloudflare_status': { + "status": 'error', + "status_text": 'Not Working', + }, + 'host_status': { + "status": 'ok', + "location": 'example.com', + }, + 'error_source': 'cloudflare', # 'browser', 'cloudflare', or 'host' + 'what_happened': '

There is an internal server error on Cloudflare\'s network.

', + 'what_can_i_do': '

Please try again in a few minutes.

', + 'ray_id': ray_id, + 'client_ip': client_ip, + 'perf_sec_by': { + "text": "Cloudflare", + "link": "https://youtube.com/watch?v=dQw4w9WgXcQ", + }, + }, use_cdn=use_cdn), 500 + + +if __name__ == "__main__": + app.run(debug=True)