python+fastapi实现类似cloudflare隐藏真实ip代理转发请求限速人机验证代码
代码语言:python
所属分类:其他
代码描述:python+fastapi实现类似cloudflare隐藏真实ip代理转发请求限速人机验证代码,可设置url单位时间内最多访问多少次,超过就要进行验证码识别真人操作,后台真实服务器ip不对外暴露,针对单个url限制。
代码标签: python 类似 fastapi cloudflare 隐藏 真实 ip 代理 转发 请求 限速
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
#!/usr/local/python3/bin/python3 # -*- coding: utf-8 -* import base64 import random import string import time import asyncio from urllib.parse import quote, urlparse from io import BytesIO import httpx from captcha.image import ImageCaptcha from fastapi import FastAPI, Request, Form from starlette.middleware.sessions import SessionMiddleware from starlette.responses import HTMLResponse, RedirectResponse, Response, StreamingResponse from jinja2 import Template # ================================================================================================= # 配置项 (Configuration) # ================================================================================================= PROXY_HOST = "127.0.0.1" PROXY_PORT = 8089 BACKEND_URL = "http://127.0.0.1:8081" RATE_LIMIT_SECONDS = 5 VERIFICATION_TIMEOUT_MINUTES = 5 CLEANUP_INTERVAL_SECONDS = 60 # ================================================================================================= # 全局状态与 FastAPI 应用初始化 (Global State & FastAPI App Initialization) # ================================================================================================= visitors = {} # { "ip": { "url_path": last_access_time } } visitors_lock = asyncio.Lock() needs_verification = {} # { "ip": { "url_path": verification_start_time } } verification_lock = asyncio.Lock() app = FastAPI() # 添加会话中间件,用于实现类似 Flask session 的功能 app.add_middleware(SessionMiddleware, secret_key='a-very-secret-key-for-fastapi', session_cookie='X-BFW-TOKEN') # 使用 httpx.AsyncClient 以支持异步请求和连接池 http_client = httpx.AsyncClient() # ================================================================================================= # HTML 模板 (HTML Template) # ================================================================================================= # 使用 Jinja2 模板引擎,功能与 render_template_string 相同 CAPTCHA_TEMPLATE_STR = """ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>安全验证</title> <style> :root { --primary-color: #007BFF; --background-color: #f0f4f8; --card-background: #ffffff; --text-color: #333; --border-color: #dee2e6; --shadow: 0 10.........完整代码请登录后点击上方下载按钮下载查看
网友评论0