В django-ipware версии 2.1; старая get_real_ip
функция устарела. Когда я использую новый get_client_ip
; мои тестовые блоки не показывают те же результаты. Означает, что две функции не ведут себя одинаково.
Ниже приведен оригинальный тест от django-ipware test unit (не моего)
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 (или самый правый в зависимости от настроек) и переходит к следующей мета, если Public IP не найден
Мои вопросы сейчас:
Как я могу вызвать get_client_ip
так, чтобы он возвращал тот же ip, который был возвращен get_real_ip
? Какова логика изменения поведения функции? Стоит ли доверять новому get_client_ip
и забыть о get_real_ip
, или продолжать использовать устаревший get_real_ip
и забыть о новом get_client_ip
?????