FastAPI (starlette) получает реальный IP клиента - PullRequest
3 голосов
/ 06 февраля 2020

У меня есть API для FastAPI, и мне нужно получить реальный IP-адрес клиента, когда он запрашивает мою страницу.

Я использую запрос Starlette. Но он возвращает мой IP-адрес сервера, а не клиентский IP-адрес.

Мой код:

@app.post('/my-endpoint')
async def my_endpoint(stats: Stats, request: Request):
    ip = request.client.host
    print(ip)
    return {'status': 1, 'message': 'ok'}

Что я делаю не так? Как получить реальный IP (как в Flask request.remote_addr)?

1 Ответ

4 голосов
/ 07 февраля 2020

request.client должно работать, если только вы не работаете за прокси-сервером (например, nginx), в этом случае используйте флаг --proxy-headers uvicorn, чтобы принять эти входящие заголовки и убедиться, что прокси-сервер их перенаправляет.

...