1. 程式人生 > >Django 如何獲取真實遠程客戶端IP

Django 如何獲取真實遠程客戶端IP

jpg 可用 base 分享 ddr 技術 自定義 客戶 get

問題簡述

我們知道HttpRequest.META字典包含所有HTTP頭部信息(可用的頭部信息取決於客戶端和服務器)。一般情況下,HttpRequest.META.get(‘REMOTE_ADDR‘)一句代碼就能獲取到你想要的客戶端IP。然而,如果部署了代理服務器等原因,就會導致得到的IP並不是真實的客戶端IP。那麽如何才能獲取到真實的遠程客戶端IP呢?

解決方法參考

1.自定義中間件

假如代碼文件路徑為“custbase.http.SetRemoteAddrFromForwardedFor”。

from django.utils.deprecation import MiddlewareMixin

class SetRemoteAddrFromForwardedFor(MiddlewareMixin): """ 如果部署了代理,使用此中間件獲取遠程客戶端IP。 在settings中註冊該中間件。 """ def process_request(self, request): try: real_ip = request.META[HTTP_X_FORWARDED_FOR] except KeyError as err: print(err) else
: real_ip = real_ip.split(",")[0] request.META[REMOTE_ADDR] = real_ip

2.註冊中間件

在settings.py中註冊上述自定義的中間件。

# 中間件
MIDDLEWARE = [
    ...
    custbase.http.SetRemoteAddrFromForwardedFor,
]

3.使用

在程序中重新使用字典HttpRequest.META。

...
remote_ip = request.META.get(REMOTE_ADDR, 獲取IP失敗
) ...

  至此。轉載請註明出處。

技術分享圖片

Django 如何獲取真實遠程客戶端IP