2012-10-31 47 views
0

我有一個要求,我需要將用戶的國家存儲在數據庫中。我可以保留一個複選框或組合框,但有沒有辦法獲取國家信息,而無需用戶輸入?有沒有辦法從用戶訪問網站的地方獲取國家名?有沒有辦法從用戶訪問網站的地方獲取國家名?

+1

歡迎來到Stack Overflow!我們鼓勵你[研究你的問題](http://stackoverflow.com/questions/how-to-ask)。如果你已經[嘗試了某些東西](http://whathaveyoutried.com/),請將其添加到問題中 - 如果沒有,請先研究並嘗試您的問題,然後再回來。 – 2012-10-31 10:34:32

回答

0

是的,有一種方法可以做到這一點,但您需要做一些工作。當用戶訪問你的網站,你可以用得到他/她的IP地址:

String ip = (request.getHeader("X_FORWARDED_FOR") == null ? request.getRemoteAddr() : request.getHeader("X_FORWARDED_FOR")); 

然後你就可以將此IP地址轉換成它的二進制形式:

long binIp = ipToLong(ip); 

ipToLong功能是這樣的:

public long ipToLong(String addr) { 
    String[] addrArray = addr.split("\\."); 

    return Long.parseLong(addrArray[0]) << 24 + 
      Long.parseLong(addrArray[1]) << 16 + 
      Long.parseLong(addrArray[2]) << 8 + 
      Long.parseLong(addrArray[3]); 

} 

最後使用IP地址數據庫查找該值屬於哪個國家。有幾個提供商。我們從software77獲得 - 它是免費的 - 並存儲在本地數據庫中,每月更新一次本地數據庫。

的幾個注意事項:

  1. 有時候地址不會被設定,所以你需要有一些合理的默認值。
  2. 有時地址會被欺騙,因此不能表示真正的IP地址(格式),所以您需要有合理的異常處理。
  3. 有時地址將來自保留的範圍(例如192.168/16),因此您需要再次設置合理的默認值。
+0

非常感謝...我會嘗試一下,讓你知道是否還有其他疑問。謝謝您的幫助 – user1643087

0

這就是IP定位器服務。請參閱示例代碼和應用程​​序@http://www.geobytes.com/iplocator.htm儘管源代碼使用PHP,但您可以嘗試使用java編寫代碼。

相關問題