📜  flask 获取用户的 ip - Python (1)

📅  最后修改于: 2023-12-03 15:30:47.179000             🧑  作者: Mango

Flask 获取用户的 IP - Python

在 Web 应用程序中,获取用户的 IP 地址是一种常见而重要的功能。无论是为了记录日志还是为了防止恶意攻击,都需要获取用户的 IP 地址。本文将介绍如何使用 Flask 框架获取用户的 IP 地址。

方式一:使用 Flask-HTTPAuth 拓展

Flask-HTTPAuth 是 Flask 拓展的一种,提供了一种基于 HTTP 头的身份验证和访问控制机制,可以用于获取用户的 IP 地址。下面是示例代码:

from flask import Flask, request
from flask_httpauth import HTTPTokenAuth

app = Flask(__name__)
auth = HTTPTokenAuth(scheme='Token')

@auth.verify_token
def verify_token(token):
    if token == 'mytoken':
        return True
    return False

@app.route('/')
@auth.login_required
def index():
    ip_address = request.remote_addr
    return 'Your IP address is {}'.format(ip_address)

if __name__ == '__main__':
    app.run(debug=True)

在上面代码中,我们定义了一个名为 verify_token 的认证函数,它检查请求头中的令牌是否与 mytoken 匹配。如果匹配,则返回 True,否则返回 False。然后我们使用 @auth.login_required 装饰器来保护访问 / 路由的用户,然后我们使用 request.remote_addr 获取用户的 IP 地址。

方式二:使用 Flask-Cors 拓展

Flask-Cors 是 Flask 拓展的一种,提供了对跨域资源共享(CORS)的支持。其跨域请求都会添加 X-Forwarded-For 头部,其中包含了客户端的真实 IP。下面是示例代码:

from flask import Flask
from flask_cors import cross_origin

app = Flask(__name__)

@app.route('/')
@cross_origin()
def index():
    ip_address = request.headers.get('X-Forwarded-For')
    return 'Your IP address is {}'.format(ip_address)

if __name__ == '__main__':
    app.run(debug=True)

在这里,我们使用了 @cross_origin() 装饰器来启用跨域访问,然后我们使用 request.headers.get('X-Forwarded-For') 获取用户的 IP 地址。

总结

以上两种方式均可用于获取用户的 IP 地址。第一种方式使用了 Flask-HTTPAuth 拓展,我们需要自己定义认证函数来检查请求头中的身份验证令牌。第二种方式使用了 Flask-Cors 拓展,这种方式可以跨域访问,并且请求头已经添加了客户端的真实 IP 地址。因此,我们可以根据自己的情况选择合适的方法来获取用户的 IP 地址。