最近想到

python 的 django 要如何取得使用者 瀏覽者的 IP 位置?

主要是在 view 中執行

要有 request 這個物件

 

def your_view(request):
    # 從 header 嘗試獲取
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    # 有的話就取逗點前第一串字串
    if x_forwarded_for:
        user_ip = x_forwarded_for.split(',')[0]
    # 沒有則用 REMOTE_ADDR 取得
    else:
        user_ip = request.META.get('REMOTE_ADDR')
    return HttpResponse(f"用户的IP地址是:{user_ip}")

 

 

這兩個差異解釋:

 

HTTP_X_FORWARDED_FOR:

這是一個用於標識客戶端原始IP地址的HTTP頭部字段。
如果客戶端通過代理或負載均衡器連接到服務器,那麽 HTTP_X_FORWARDED_FOR 通常包含了客戶端的原始IP地址列表
這個列表中的第一個IP地址是最初的客戶端IP,後續的IP地址是經過的代理服務器的IP地址,以逗號分隔。

 

REMOTE_ADDR:

REMOTE_ADDR 是HTTP請求的環境變量,用於標識直接連接到服務器的客戶端的IP地址。
它僅提供了最後一個連接到服務器的代理或客戶端的IP地址,而不提供之前的代理地址。如果有多層代理,REMOTE_ADDR 只包含了最後一個代理服務器的IP地址。

給大家參考囉