Django 如何獲取真實遠程客戶端IP
阿新 • • 發佈:2018-10-14
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 MiddlewareMixinclass 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