如何获取请求 Heroku 应用的 IP 地址?

3

Heroku有一个路由系统来将请求转发到dynos。但我的应用程序需要知道请求从哪里来,但它总是得到网络中的随机地址,可能是Heroku的内部地址。

我看到在日志中,Heroku的路由器获取了我的IP地址并且转发了请求。有没有一种方法可以获取请求的实际IP地址?

我的应用程序使用Flask编写的Python。


可能是 HTTP_X_FORWARDED_FOR 服务器变量。 - hjpotter92
https://en.wikipedia.org/wiki/X-Forwarded-For - hjpotter92
2个回答

1

如果在本地或者在其他地方托管网站时,您希望保留request.remote_addr中的IP地址:

def getIP():
    if 'X-Forwarded-For' in request.headers:
        return request.headers['X-Forwarded-For']
    return request.remote_addr

0
在查看Flask的文档中关于过滤头等内容,我发现:
request.headers['X-Forwarded-For']

这里是获取客户端真实IP地址的地方。


从OP的已删除评论中,本文提供了一个更安全的解决方案


@Leva7 正如该帖子所提到的,每次转发都会附加一个新的IP地址到 X-Forwarded-For 中。这就是为什么我没有选择返回的第一个值。我只是指出了您可以找到客户端真实IP的标头。如何解析它,是您自己的任务。 :) 我也会在我的答案中放置您提供的链接。 - hjpotter92

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接