使用django-ipware get_client_ip而不是get_real_ip

问题描述 投票:0回答:1

在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'

在深入研究代码之后,我发现新的get_client_ip并没有像get_real_ip那样在元内迭代。如果找不到公共IP,它会检出最左边的ip(或最右边取决于设置)并跳到下一个元数据

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

python django ip
1个回答
0
投票

我们应该忘记旧的get_real_ip功能及其行为。请参阅作者的回复:https://github.com/un33k/django-ipware/issues/45#issuecomment-421572304

© www.soinside.com 2019 - 2024. All rights reserved.