解析X-Forwarded-For以获取Heroku上werkzeug的ip

2024-10-06 13:08:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

X-forward-For的一般格式为:

X-Forwarded-For: client1, proxy1, proxy2

在flask上使用werkzeug,我试图想出一个解决方案来访问客户端的原始IP。

有人知道怎么做吗?

谢谢你!


Tags: 服务器客户端flask代理for客户机heroku格式
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

在您的视图中.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']

Werkzeug(和Flask)将头存储在^{}实例中。你应该可以这样做:

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

或者,您可以使用^{}(感谢@Bastian指出这一点!)以下内容:

provided_ips = request.access_route
# First entry in the list is the client's IP

相关问题 更多 >