解析X-Forwarded-用于在Heroku上获取werkzeug的ip

时间:2011-11-06 09:53:44

标签: python heroku ip flask werkzeug

Heroku代理从客户端到服务器的请求,因此您必须解析X-Forwarded-For以查找原始IP地址。

X-Forwarded-For的一般格式是:

X-Forwarded-For: client1, proxy1, proxy2

在烧瓶上使用werkzeug,我正在尝试提供一个解决方案,以便访问客户端的原始IP。

有没有人知道这样做的好方法?

谢谢!

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:2)

这是我在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']