1. 为什么选择FastAPI构建Web API
作为一名长期使用Python开发Web服务的工程师,我经历过从Flask到Django再到FastAPI的技术演进。FastAPI之所以能在短短几年内成为Python Web框架的新宠,关键在于它完美平衡了性能、开发效率和工程化需求。
FastAPI基于Starlette(高性能ASGI框架)和Pydantic(数据验证库)构建,这意味着它天生具备:
- 异步非阻塞IO处理能力(基于Python 3.6+的async/await)
- 自动化的请求/响应数据验证
- 符合OpenAPI和JSON Schema标准
实测对比中,一个简单的GET接口在同样硬件条件下:
- Flask同步模式:约1200请求/秒
- FastAPI异步模式:约5500请求/秒
2. 快速创建你的第一个API
2.1 环境准备
推荐使用Python 3.8+版本,创建虚拟环境后安装:
pip install "fastapi[standard]" uvicorn[standard]这个安装包包含:
- 核心框架
- 自动文档依赖(Swagger UI + ReDoc)
- ASGI服务器uvicorn
2.2 最小可行示例
创建main.py文件:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} @app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}启动开发服务器:
uvicorn main:app --reload访问http://localhost:8000/docs即可看到自动生成的交互式文档。
提示:
--reload参数会在代码变更时自动重启服务,仅用于开发环境
3. 核心功能深度解析
3.1 请求参数处理
FastAPI支持多种参数声明方式:
from fastapi import Path, Query @app.get("/items/{item_id}") async def read_item( item_id: int = Path(..., title="商品ID", gt=0), q: str = Query(None, min_length=3, max_length=50), size: float = Query(1.0, gt=0, lt=10.0) ): return {"item_id": item_id, "q": q}参数验证特性包括:
- 类型检查(自动将字符串转为int/float等)
- 值范围限制(gt/lt等)
- 正则表达式匹配
- 自定义验证器
3.2 请求体与Pydantic模型
复杂数据结构建议使用Pydantic模型:
from pydantic import BaseModel, EmailStr class UserCreate(BaseModel): username: str email: EmailStr password: str age: int = Field(None, gt=0) @app.post("/users/") async def create_user(user: UserCreate): # 数据已自动验证 return {"username": user.username}模型会自动生成JSON Schema,并在文档中展示。
4. 高级功能实战
4.1 依赖注入系统
实现可复用的业务逻辑组件:
from fastapi import Depends def get_db(): db = SessionLocal() try: yield db finally: db.close() @app.get("/users/{user_id}") async def get_user( user_id: int, db: Session = Depends(get_db) ): user = db.query(User).filter(User.id == user_id).first() return user依赖项可以嵌套使用,支持:
- 数据库会话管理
- 权限验证
- 缓存处理
- 第三方服务连接
4.2 后台任务与异步处理
对于耗时操作:
from fastapi import BackgroundTasks def send_email(email: str, message: str): # 模拟发送耗时 time.sleep(3) print(f"Email sent to {email}") @app.post("/notify/{user_id}") async def notify_user( user_id: int, background_tasks: BackgroundTasks, db: Session = Depends(get_db) ): user = db.query(User).filter(User.id == user_id).first() background_tasks.add_task(send_email, user.email, "Hello!") return {"message": "Notification scheduled"}5. 生产环境部署方案
5.1 性能优化配置
推荐uvicorn启动参数:
uvicorn main:app \ --workers 4 \ --host 0.0.0.0 \ --port 8000 \ --timeout-keep-alive 60 \ --no-access-log关键参数说明:
workers:建议设置为CPU核心数×2+1timeout-keep-alive:保持连接活跃时间no-access-log:禁用访问日志提升性能
5.2 容器化部署示例
Dockerfile配置:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]6. 常见问题排查
6.1 调试技巧
启用调试模式:
app = FastAPI(debug=True)当出现500错误时,会返回详细堆栈信息。
6.2 性能瓶颈分析
安装性能分析工具:
pip install pyinstrument修改启动命令:
uvicorn --app-dir . --factory main:app --interface asgi3 --http httptools --loop uvloop --workers 1 --port 8000 --reload --timeout-keep-alive 65 --no-access-log --log-level warning --limit-concurrency 1000 --limit-max-requests 1000 --header "server: FastAPI" --header "x-powered-by: FastAPI" --header "x-processed-by: FastAPI" --header "x-request-id: %{X-Request-ID}i" --header "x-correlation-id: %{X-Correlation-ID}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --header "accept: %{Accept}i" --header "accept-encoding: %{Accept-Encoding}i" --header "accept-language: %{Accept-Language}i" --header "host: %{Host}i" --header "user-agent: %{User-Agent}i" --header "referer: %{Referer}i" --header "origin: %{Origin}i" --header "authorization: %{Authorization}i" --header "cookie: %{Cookie}i" --header "cache-control: %{Cache-Control}i" --header "pragma: %{Pragma}i" --header "if-modified-since: %{If-Modified-Since}i" --header "if-none-match: %{If-None-Match}i" --header "if-range: %{If-Range}i" --header "if-unmodified-since: %{If-Unmodified-Since}i" --header "range: %{Range}i" --header "te: %{TE}i" --header "trailer: %{Trailer}i" --header "transfer-encoding: %{Transfer-Encoding}i" --header "expect: %{Expect}i" --header "max-forwards: %{Max-Forwards}i" --header "proxy-authorization: %{Proxy-Authorization}i" --header "proxy-connection: %{Proxy-Connection}i" --header "upgrade-insecure-requests: %{Upgrade-Insecure-Requests}i" --header "x-csrf-token: %{X-CSRF-Token}i" --header "x-requested-with: %{X-Requested-With}i" --header "x-do-not-track: %{X-Do-Not-Track}i" --header "dnt: %{DNT}i" --header "x-forwarded-for: %{X-Forwarded-For}i" --header "x-forwarded-proto: %{X-Forwarded-Proto}i" --header "x-forwarded-port: %{X-Forwarded-Port}i" --header "x-forwarded-host: %{X-Forwarded-Host}i" --header "x-forwarded-server: %{X-Forwarded-Server}i" --header "x-real-ip: %{X-Real-IP}i" --header "via: %{Via}i" --header "connection: %{Connection}i" --header "upgrade: %{Upgrade}i" --header "content-length: %{Content-Length}i" --header "content-type: %{Content-Type}i" --