📅  最后修改于: 2023-12-03 15:30:47.179000             🧑  作者: Mango
在 Web 应用程序中,获取用户的 IP 地址是一种常见而重要的功能。无论是为了记录日志还是为了防止恶意攻击,都需要获取用户的 IP 地址。本文将介绍如何使用 Flask 框架获取用户的 IP 地址。
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)的支持。其跨域请求都会添加 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 地址。