为了账号安全,请及时绑定邮箱和手机立即绑定

使用 django-ipware get_client_ip 而不是 get_real_ip

使用 django-ipware get_client_ip 而不是 get_real_ip

天涯尽头无女友 2021-06-03 18:47:08
在 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??????
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 377 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号