在Heroku上使用werkzeug解析X-Forwarded-For获取IP
Heroku 是一个可以让你轻松部署应用的平台,它会把用户的请求从客户端转发到服务器。所以,你需要解析一下 X-Forwarded-For 这个字段,才能找到最初发起请求的用户的 IP 地址。
X-Forwarded-For 的一般格式是:
X-Forwarded-For: client1, proxy1, proxy2
我在用 Flask 的 werkzeug 库,想找个办法来获取客户端的原始 IP 地址。
有没有人知道好的方法呢?
谢谢!
2 个回答
3
这是我在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']
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