zoukankan      html  css  js  c++  java
  • Django 如何获取真实远程客户端IP

    问题简述

    我们知道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部署 ]

  • 相关阅读:
    Java08_Lambda表达式
    Java基础02
    Java基础07
    JAVA基础06
    Java基础05
    Java基础01
    面向对象与面向过程
    Java常识2
    CSS常用属性记录
    geoserver发布热力图服务
  • 原文地址:https://www.cnblogs.com/wcwnina/p/9787222.html
Copyright © 2011-2022 走看看