码迷,mamicode.com
首页 > 其他好文 > 详细

Django 如何获取真实远程客户端IP

时间:2018-10-14 20:57:22      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:情况   如何   try   http   自定义   服务   导致   nbsp   代码   

问题简述

我们知道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失败)
...

 

  至此。转载请注明出处。

技术分享图片

Django 如何获取真实远程客户端IP

标签:情况   如何   try   http   自定义   服务   导致   nbsp   代码   

原文地址:https://www.cnblogs.com/wcwnina/p/9787222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!