25 lines
754 B
Python
25 lines
754 B
Python
from __future__ import annotations
|
||
|
||
from fastapi import Request
|
||
|
||
|
||
def request_client_ip(request: Request) -> str:
|
||
"""提取客户端 IP,优先读取代理转发头。"""
|
||
forwarded_for = request.headers.get("x-forwarded-for", "")
|
||
if forwarded_for:
|
||
return forwarded_for.split(",", 1)[0].strip()
|
||
return request.client.host if request.client else ""
|
||
|
||
|
||
def request_user_agent(request: Request) -> str:
|
||
"""提取浏览器 User-Agent。"""
|
||
return request.headers.get("user-agent", "")
|
||
|
||
|
||
def operation_request_meta(request: Request) -> dict[str, str]:
|
||
"""生成操作日志使用的请求元信息。"""
|
||
return {
|
||
"ip_address": request_client_ip(request),
|
||
"user_agent": request_user_agent(request),
|
||
}
|