python fastapi获取发送请求的客户端真实ip
时间: 2024-10-20 08:07:41 浏览: 25
在使用Python FastAPI开发Web应用时,获取客户端的真实IP地址通常需要通过`FastAPI`本身提供的中间件或者第三方库来实现,因为标准的HTTP头信息`X-Forwarded-For`可能会被反向代理服务器更改。以下是几种常见方法:
1. **FastAPI自带的**:如果你直接处理请求,可以使用`Request`对象的`client`属性,它会提供原始客户端IP(如果可用)。例如:
```python
from fastapi import Request
def get_client_ip(request: Request):
x_forwarded_for = request.headers.get("X-Forwarded-For")
if x_forwarded_for:
ip = x_forwarded_for.split(",")[0].strip()
else:
ip = request.client.host
return ip
```
2. **使用FastAPI中间件**:你可以创建一个中间件函数,在每个请求到达时检查并处理`X-Forwarded-For`头。例如,使用`starlette.middleware.trustedhost.TrustedHostMiddleware`:
```python
from fastapi import FastAPI
from starlette.middleware.trustedhost import TrustedHostMiddleware
app = FastAPI(middleware=[TrustedHostMiddleware()])
# 然后在其他地方获取IP
ip = request.client.host
```
3. **使用第三方库**:如`uvicorn-For`等头信息:
```pip install uvicorn-proxyheaders
```
然后配置Uvicorn:
```python
from proxy_headers import ProxyHeadersMiddleware
app = FastAPI()
app.add_middleware(ProxyHeadersMiddleware)
ip = request.client.host
```
阅读全文