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