Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析X-Forwarded-For以获得Heroku上werkzeug的ip_Python_Heroku_Ip_Flask_Werkzeug - Fatal编程技术网

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

Python 解析X-Forwarded-For以获得Heroku上werkzeug的ip,python,heroku,ip,flask,werkzeug,Python,Heroku,Ip,Flask,Werkzeug,Heroku代理从客户端到服务器的请求,因此您必须解析X-Forwarded-For来查找原始IP地址 X-For的一般格式为: X-Forwarded-For: client1, proxy1, proxy2 在flask上使用werkzeug,我试图想出一个解决方案,以便访问客户端的原始IP 有人知道这样做的好方法吗 谢谢大家! Werkzeug(和烧瓶)将标题存储在的实例中。您应该能够执行以下操作: provided_ips = request.headers.getlist("X-Fo

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

X-For的一般格式为:

X-Forwarded-For: client1, proxy1, proxy2
在flask上使用werkzeug,我试图想出一个解决方案,以便访问客户端的原始IP

有人知道这样做的好方法吗

谢谢大家!

Werkzeug(和烧瓶)将标题存储在的实例中。您应该能够执行以下操作:

provided_ips = request.headers.getlist("X-Forwarded-For")
# The first entry in the list should be the client's IP.
或者,您可以使用(感谢@Bastian指出这一点!):


这是我在Django中使用的。看到这个了吗

注意:至少在Heroku HTTP_X_FORWARDED_上有一个IP地址数组。第一个是客户端IP,其余的是代理服务器IP

在settings.py中:

USE_X_FORWARDED_HOST = True
在your 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']

你可能想检查@Bastian,你发布的链接上写着“如果转发头存在”,我理解这是
X-forwarded-For
,因此如果转发头不存在,访问路由功能会工作吗,除了heroku之外,我没有任何地方可以测试我的flask应用程序。请阅读(除非你相信Heroku以外的客户不会对自己撒谎…
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']