根據ip獲取城市
在web開發中,經常有需求,需要知道客戶使用者現在所在位置(城市),一般原理是這樣,第一:先通過request物件獲得遠端使用者的ip地址,第二:再利用第三方免費的(介面)服務,通過ip查詢出使用者的所在城市,
我擅長jsp,下面我們就已jsp為例:
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了 Apache,Nagix等反向代理(此處不懂反向代理請點選 點選開啟連結 )軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用 request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1或 192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭資訊中,增加了X-FORWARDED-FOR資訊。用以跟蹤原有的客戶端 IP地址和原來客戶端請求的伺服器地址。
舉例來說,當我們訪問口碑網首頁hangzhou.jsp時,其實並不是我們瀏覽器真正訪問到了伺服器上的hangzhou.jsp 檔案,而是先由代理伺服器Nagix去訪問hagnzhou.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問hangzhou.jsp的,所以hangzhou.jsp中通過 request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。但是head中增加了X-FORWARDED-FOR,我們可以通過request.getHeader("x-forwarded-for")來判斷是否是代理,
eg:
獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
------------------------------------------------------------------------------------------------------------
獲得客戶端真實IP地址的方法二
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
通過ip查詢城市
通過網路的IP查詢API 通過IP地址確定城市
這個辦法IP庫更新比較快。通用的庫有幾個比如google。
xml處理頁面完全可以通過nokogiri等專門處理工具代替。
提供IP地址查詢的API很多比如網易:
1.http://www.youdao.com/smartresult-xml/search.s?type=ip&q=IP地址
2. http://ip2loc.appspot.com/ #含有詳細例項講解, 但是由於GWF地址可能解析不到
3. 新浪的IP地址查詢介面:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
4. 新浪多地域測試方法:http://int.dpool.sina.com.cn/ipl ... amp;ip=218.192.3.42
#這個比較全,但是有個別ip解析的不對,打個資料庫沒有更新吧。。。。
5. 搜狐IP地址查詢介面(預設GBK):http://pv.sohu.com/cityjson
6. 搜狐IP地址查詢介面(可設定編碼):http://pv.sohu.com/cityjson?ie=utf-8
更多詳細請參考:www.cnblogs.com/lwm-1988/archive/2012/07/02/2573003.html
我一般使用新浪的:int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=後面寫那個ip字串
舉例:
int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.192.3.42
返回一段js程式碼:
var remote_ip_info = {"ret":1,"start":"218.192.0.0","end":"218.192.7.255","country":"\u4e2d\u56fd","province":"\u5e7f\u4e1c","city":"\u5e7f\u5dde","district":"","isp":"\u6559\u80b2\u7f51","type":"\u5b66\u6821","desc":"\u5e7f\u5dde\u5927\u5b66\u7eba\u7ec7\u670d\u88c5\u5b66\u9662\u6559\u80b2\u7f51"};
利用eval執行這段程式碼:其中country代表國家或者地區,province代表省份,......
相關文章
- js根據ip地址獲取所在城市JS
- js根據ip地址獲取省份城市的方法JS
- js根據ip地址獲取城市地理位置JS
- 根據IP獲取國家
- 根據 IP 獲取省市名稱
- 根據IP獲取國家省市
- js根據IP地址判斷城市JS
- js根據IP地址獲取當前的省市JS
- JSF/JAVA 根據IP獲取客戶端Mac地址JSJava客戶端Mac
- JAVA根據IP地址獲取詳細的地域資訊(轉)Java
- 高德解析城市的分析,根據高德的經緯度獲取城市cityCode
- 根據聲音獲取物件物件
- javascript根據class獲取物件JavaScript物件
- js依據ip獲取使用者當前所在城市JS
- PHP獲取ip與ip所在城市PHP
- php根據地理座標獲取國家、省份、城市,及周邊資料類PHP
- js根據class值獲取元素物件JS物件
- 根據使用者來獲取渠道
- 利用js獲取IP,所在城市JS
- 根據IP查詢所在城市介面(查詢使用者所在城市)
- 根據key集合批次從map中獲取value
- 根據id獲取元素的寬度的方法
- C#根據經緯度獲取實體地址C#
- php 根據給定字串時間獲取時區PHP字串
- activiti 根據 流程例項ID 獲取發起人
- android 根據設定的日期獲取星期幾Android
- 百度地圖:根據位置獲取座標地圖
- 根據IP定位地理位置
- 城市列表-根據拼音首字母排序排序
- 根據微信code獲取換取使用者登入態資訊
- Kubernetes 教程:根據 PID 獲取 Pod 名稱
- 根據兩個日期之間獲取LocalDate日曆列表LDA
- 根據IP頭格式 寫sniff (轉)
- js獲取使用者當前所在城市(ip)JS
- 微信小程式中根據字母選擇城市微信小程式
- js根據引數名獲取url上的引數值JS
- 根據dom物件或其id獲取物件位置的程式碼物件
- 易優CMS根據aid獲取文件頁面連結AI