【问题标题】:Question about getting an IP address in Genie关于在 Genie 中获取 IP 地址的问题
【发布时间】:2021-09-25 22:12:48
【问题描述】:

我是 Django 的新手,我从专家那里得到了这段代码,但我不知道它是如何工作的,也不知道有谁能解释它是如何工作的?

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

【问题讨论】:

  • 你必须学习HTTP(超文本传输​​协议)才能理解它。
  • 当客户端(即 Web 浏览器)向服务器上的某个页面发送请求时,它会添加额外的信息(HTTP 标头),其中之一可以是 REMOTE_ADDRIP。如果请求通过proxy server,那么proxy serve 可以将其IP 放入REMOTE_ADDR 并将原始IP 保留在HTTP_X_FORWARDED_FOR

标签: python html django web ip


【解决方案1】:

我认为重要的是要提到您的代码 sn-p 可能来自这个discussion。如果人们想阅读整个答案。

代码后跟解释:

def get_client_ip(request):

使用输入 request 启动函数 get_client_ip

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

HTTP_X_FORWARDED_FOR 是您存储在变量x_forwarded_for 中的HTTP request header 的一个字段。

if x_forwarded_for:
    ip = x_forwarded_for.split(',')[0]

变量x_forwarded_for 是由逗号分隔的IP 地址列表(示例如下)。

203.0.113.195, 70.41.3.18, 150.172.238.178

由于您只对第一个 IP 地址感兴趣,因此您使用逗号分隔此字符串 .split(','),并且只获取第一个对象 [0]

else:
    ip = request.META.get('REMOTE_ADDR')

如果变量x_forwarded_for 为空,那么您尝试通过从HTTP 请求标头REMOTE_ADDR 字段获取数据来获取用户IP 地址,因为这是您的第二个最佳选择。

return ip

在函数结束时,您要返回 IP 地址,以便您可以在应用程序中使用它。

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 2014-05-28
    • 2011-09-11
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多