Parse X-Forwarded-For, чтобы получить IP с werkzeug на Heroku - PullRequest
6 голосов
/ 06 ноября 2011

Heroku передает запросы от клиента к серверу, поэтому вам нужно проанализировать X-Forwarded-For, чтобы найти исходящий IP-адрес.

Общий формат X-Forwarded-For:

X-Forwarded-For: client1, proxy1, proxy2

Используя werkzeug на фляге, я пытаюсь найти решение для доступа к исходному IP-адресу клиента.

Кто-нибудь знает хороший способ сделать это?

Спасибо!

Ответы [ 2 ]

15 голосов
/ 07 ноября 2011

Заголовки хранилища Werkzeug (и Flask) в экземпляре werkzeug.datastructures.Headers.Вы должны быть в состоянии сделать что-то вроде этого:

provided_ips = request.headers.getlist("X-Forwarded-For")
# The first entry in the list should be the client's IP.

В качестве альтернативы, вы можете использовать request.access_route (спасибо @Bastian за указание на это!):

provided_ips = request.access_route
# First entry in the list is the client's IP
2 голосов
/ 14 марта 2012

Это то, что я использую в Django. Посмотреть это https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_host

Примечание. По крайней мере на Heroku HTTP_X_FORWARDED_FOR будет массив IP-адресов. Первый - это IP-адрес клиента, остальные - IP-адреса прокси-сервера.

в settings.py:

USE_X_FORWARDED_HOST = True

в твоих views.py:

if 'HTTP_X_FORWARDED_FOR' in request.META:
    ip_adds = request.META['HTTP_X_FORWARDED_FOR'].split(",")   
    ip = ip_adds[0]
else:
    ip = request.META['REMOTE_ADDR']
...