2017-08-28 44 views
2

TWebRequest有兩種方法An Iteraitve對retrive客戶端IP地址:德爾福Web.HTTPApp.TWebRequest REMOTEIP VS RemoteAddr

  1. REMOTEIP
  2. RemoteAddr

docs of RemoteIP

指定遠程目標機器的IP與HTTP相關聯10請求消息。閱讀RemoteIP屬性以獲取與HTTP請求消息關聯的遠程目標機器的IP地址 。

docs of RemoteAddr

指示與HTTP 請求消息相關聯的客戶端的遠程IP地址。讀取RemoteAddr以獲取Web客戶端請求源 的IP地址。

它們看起來非常接近,但RemoteIP返回一個空字符串。 我想檢索客戶端的IP地址,什麼是正確的方法?

+2

有趣的是,RemoteIP [沒有出現在屬性列表中](http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/!!MEMBEROVERVIEW_HTTPApp_TWebRequest.html)。也許這是他們打算在某個時候實現的東西,或者那只是因爲它必須符合一些祖先的接口或抽象方法。看來RemoteIP沒有真正的目的,你應該使用RemoteAddr。 – GolezTrol

回答

3

如果我們看看源代碼,我們會發現在TWebRequest

聲明
property RemoteIP: string read GetRemoteIP; 
property RemoteAddr: string index 21 read GetStringVariable; 

以下實現:

function TWebRequest.GetRemoteIP: string; 
begin 
    Result := EmptyStr; 
end; 

和GetStringVariable是一個虛擬的方法。

讓我們來看看子類之一 - TISAPIRequest,我們會發現如下:

LResult := GetFieldByNameA(ServerVariables[Index]); 

ServerVariables [21]爲 'REMOTE_ADDR' 標題,這表明客戶端或代理服務器的IP。

但是沒有GetRemoteIP的實現。

它看起來像RemoteIP沒有在請求中使用,因爲TCGIRequest,TApacheRequest和TWinCGIRequest也不實現GetRemoteIP。