问题简述
我们知道HttpRequest.META字典包含所有HTTP头部信息(可用的头部信息取决于客户端和服务器)。一般情况下,HttpRequest.META.get(‘REMOTE_ADDR‘)一句代码就能获取到你想要的客户端IP。然而,如果部署了代理服务器等原因,就会导致得到的IP并不是真实的客户端IP。那么如何才能获取到真实的远程客户端IP呢?
解决方法参考
1.自定义中间件
假如代码文件路径为“custbase.http.SetRemoteAddrFromForwardedFor”。
from django.utils.deprecation import MiddlewareMixin class SetRemoteAddrFromForwardedFor(MiddlewareMixin): """ 如果部署了代理,使用此中间件获取远程客户端IP。 在settings中注册该中间件。 """ def process_request(self, request): try: real_ip = request.META[‘HTTP_X_FORWARDED_FOR‘] except KeyError as err: print(err) else: real_ip = real_ip.split(",")[0] request.META[‘REMOTE_ADDR‘] = real_ip
2.注册中间件
在settings.py中注册上述自定义的中间件。
# 中间件 MIDDLEWARE = [ ... ‘custbase.http.SetRemoteAddrFromForwardedFor‘, ]
3.使用
在程序中重新使用字典HttpRequest.META。
... remote_ip = request.META.get(‘REMOTE_ADDR‘, ‘获取IP失败‘) ...
至此。转载请注明出处。
原文地址:https://www.cnblogs.com/wcwnina/p/9787222.html
时间: 2024-10-16 02:25:24