使用 django-ipware get_client_ip 而不是 get_real_ip

在 django-ipware 2.1 版中;旧get_real_ip功能已弃用。当我使用新的get_client_ip; 我的测试单元没有显示相同的结果。意味着这两个函数的行为不同。


以下是来自 django-ipware 测试单元的原始测试(不是我的)


def test_http_x_forwarded_for_multiple(self):

    request = HttpRequest()

    request.META = {

        'HTTP_X_FORWARDED_FOR': '192.168.255.182, 10.0.0.0, 127.0.0.1, 198.84.193.157, 177.139.233.139',

        'HTTP_X_REAL_IP': '177.139.233.132',

        'REMOTE_ADDR': '177.139.233.133',

    }

    ip = get_real_ip(request)

    self.assertEqual(ip, "198.84.193.157")

以上当然工作正常,但我想确保使用新的get_client_ip将给出相同的结果(用于系统升级目的)。但测试实际上没有通过断言:


def test_http_x_forwarded_for_multiple(self):

    request = HttpRequest()

    request.META = {

        'HTTP_X_FORWARDED_FOR': '192.168.255.182, 10.0.0.0, 127.0.0.1, 198.84.193.157, 177.139.233.139',

        'HTTP_X_REAL_IP': '177.139.233.132',

        'REMOTE_ADDR': '177.139.233.133',

    }

    ip, is_routable = get_client_ip(request)

    self.assertEqual(ip, "198.84.193.157")

结果:


断言错误:'177.139.233.132'!='198.84.193.157'


深入研究代码后,我发现 newget_client_ip并没有像get_real_ip. 它检查最左边的 ip(或最右边的 ip,具体取决于设置),如果未找到公共 IP,则跳到下一个元数据


我现在的问题是:如何get_client_ip以返回相同 ip 的方式调用get_real_ip?改变函数行为背后的逻辑是什么?我应该相信新的get_client_ip而忘记get_real_ip,还是继续使用已弃用的get_real_ip而忘记新的get_client_ip??????


天涯尽头无女友
浏览 378回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python