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