文章出自:http://hejianke83.blog.163.com/blog/static/60765162012101694919149/
非常感谢这位大哥,解决了我的问题。
在系统中,网站的头部一般都有显示是哪个城市的,用户进入到网站的首页后,默认城市应该是用户本地的城市信息,例如:北京,网站就要根据你的IP地址的信息,查询数据,获取北京部分的数据,呵呵,当然我可能描述的不是很清楚,但是可以理解成,通过IP地址定位地理信息就行。很多人现在使用以QQ数据库为基础获取地址信息,但不完整、而且不规范。互联网提供很多其他接口可以完成这项功能.
接口如下:
通过淘宝IP地址库获取IP位置
1. 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{ "code": 0, "data": { "ip": "210.75.225.254", "country": "中国", "area": "华北", "region": "北京市", "city": "北京市", "county": "", "isp": "电信", "country_id": "86", "area_id": "100000", "region_id": "110000", "city_id": "110000", "county_id": "-1", "isp_id": "100017" } }
其中code的值的含义为,0:成功,1:失败。
新浪的接口 :http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42
返回值
var remote_ip_info = { "ret": 1, "start": "218.192.0.0", "end": "218.192.7.255", "country": "中国", "province": "广东", "city": "广州", "district": "", "isp": "教育网", "type": "学校", "desc": "广州大学纺织服装学院" }
通过jqry 获取相应的数据
$.getScript('数据接口',function(){
//新浪:remote_ip_info.country
})
根据腾讯IP分享计划的地址获取IP所在地
实例:
package com.gocheck.common.utils.ipmanager; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; /** * 根据IP地址获取详细的地域信息 * @project:personGocheck * @class:AddressUtils.java * @author:heguanhua E-mail:37809893@qq.com * @date:Nov 14, 2012 6:38:25 PM */ public class AddressUtils { /** * * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return * @throws UnsupportedEncodingException */ public String getAddresses(String content, String encodingString) throws UnsupportedEncodingException { // 这里调用pconline的接口 String urlStr = "http://ip.taobao.com/service/getIpInfo.php"; // 从http://whois.pconline.com.cn取得IP所在的省市区信息 String returnStr = this.getResult(urlStr, content, encodingString); if (returnStr != null) { // 处理返回的省市区信息 System.out.println(returnStr); String[] temp = returnStr.split(","); if(temp.length<3){ return "0";//无效IP,局域网测试 } String region = (temp[5].split(":"))[1].replaceAll("\"", ""); region = decodeUnicode(region);// 省份 /** * String country = ""; String area = ""; String region = ""; String * city = ""; String county = ""; String isp = ""; for(int i=0;i<temp.length;i++){ * switch(i){ case 1:country = * (temp[i].split(":"))[2].replaceAll("\"", ""); country = * decodeUnicode(country);//国家 break; case 3:area = * (temp[i].split(":"))[1].replaceAll("\"", ""); area = * decodeUnicode(area);//地区 break; case 5:region = * (temp[i].split(":"))[1].replaceAll("\"", ""); region = * decodeUnicode(region);//省份 break; case 7:city = * (temp[i].split(":"))[1].replaceAll("\"", ""); city = * decodeUnicode(city);//市区 break; case 9:county = * (temp[i].split(":"))[1].replaceAll("\"", ""); county = * decodeUnicode(county);//地区 break; case 11:isp = * (temp[i].split(":"))[1].replaceAll("\"", ""); isp = * decodeUnicode(isp);//ISP公司 break; } } */ // System.out.println(country+"="+area+"="+region+"="+city+"="+county+"="+isp); return region; } return null; } /** * @param urlStr * 请求的地址 * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return */ private String getResult(String urlStr, String content, String encoding) { URL url = null; HttpURLConnection connection = null; try { url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection();// 新建连接实例 connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒 connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒 connection.setDoOutput(true);// 是否打开输出流 true|false connection.setDoInput(true);// 是否打开输入流true|false connection.setRequestMethod("POST");// 提交方法POST|GET connection.setUseCaches(false);// 是否缓存true|false connection.connect();// 打开连接端口 DataOutputStream out = new DataOutputStream(connection .getOutputStream());// 打开输出流往对端服务器写数据 out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx out.flush();// 刷新 out.close();// 关闭输出流 BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据 // ,以BufferedReader流来读取 StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); return buffer.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect();// 关闭连接 } } return null; } /** * unicode 转换成 中文 * * @author fanhui 2007-3-15 * @param theString * @return */ public static String decodeUnicode(String theString) { char aChar; int len = theString.length(); StringBuffer outBuffer = new StringBuffer(len); for (int x = 0; x < len;) { aChar = theString.charAt(x++); if (aChar == '\\') { aChar = theString.charAt(x++); if (aChar == 'u') { int value = 0; for (int i = 0; i < 4; i++) { aChar = theString.charAt(x++); switch (aChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + aChar - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + aChar - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + aChar - 'A'; break; default: throw new IllegalArgumentException( "Malformed encoding."); } } outBuffer.append((char) value); } else { if (aChar == 't') { aChar = '\t'; } else if (aChar == 'r') { aChar = '\r'; } else if (aChar == 'n') { aChar = '\n'; } else if (aChar == 'f') { aChar = '\f'; } outBuffer.append(aChar); } } else { outBuffer.append(aChar); } } return outBuffer.toString(); } // 测试 public static void main(String[] args) { AddressUtils addressUtils = new AddressUtils(); // 测试ip 219.136.134.157 中国=华南=广东省=广州市=越秀区=电信 String ip = "122.49.20.247"; String address = ""; try { address = addressUtils.getAddresses("ip="+ip, "utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(address); // 输出结果为:广东省,广州市,越秀区 } }
相关推荐
java根据ip获取位置 根据IP地址获取详细的地域信息 淘宝API 新浪API
在互联网技术中,根据IP地址获取用户的地理位置是一个常见的需求。例如,网站可能需要根据访问者的IP来提供地区性的服务或内容。Java作为广泛使用的编程语言,提供了多种方法实现通过IP地址查询地理位置信息。 首先...
总结来说,`geoip2-2.12.0.jar`是一个强大的Java库,可以帮助我们高效地通过IP地址获取详细的地理位置信息。结合GeoIP2或GeoLite2数据库,开发者可以在自己的应用程序中轻松实现IP地址的地理位置查询,从而提升用户...
根据IP地址获取详细的地域信息工具类
本篇文章将详细解释如何在Java环境下,通过Servlet和Reactive编程模型来获取HTTP请求中的IP地址。 首先,让我们从Servlet API开始。Servlet是Java用于构建动态Web应用程序的标准接口。在Servlet中,我们通常使用`...
### 使用Java获取访问者真实IP地址 在现代Web开发中,获取客户端的真实IP地址是非常重要的。这不仅有助于网站统计分析,还可以用于安全控制、地域限制等功能。然而,在使用如Apache、Squid等反向代理服务器的情况下...
这些库提供了API接口,允许开发者通过给定的IP地址获取国家、城市、经纬度等信息。首先,你需要下载并引入相应的库到你的项目中,然后按照以下步骤进行操作: 1. **初始化数据库**: 使用GeoIP2提供的API加载数据库...
在网络开发中,获取用户的 IP 地址归属地是非常有用的功能,例如在电商平台中可以根据用户的 IP 地址归属地进行物流信息的显示和管理。在这篇文章中,我们将使用 JS 调用第三方 API 获取 IP 归属地,简单方便实用。 ...
根据IP地址获取详细的地域信息 获取指定IP的区域位置 java代码
在编程中,此类可能包含了获取和解析IP地址到地域信息的方法。可能包括了IP到经纬度的转换,或者与预定义的IP地址数据库进行匹配,以确定IP的国家、地区、城市等详细信息。 接着,"IMGFilter.java"可能是一个图像...
而将其转换成实际的地域信息,如国家、地区和街道名称,能够帮助我们了解网络活动的来源地,对于业务分析和用户行为研究具有重要意义。 首先,我们需要了解IP地址的工作原理。IP地址分为IPv4和IPv6两种类型,IPv4由...
2. **创建IPv6Bean对象**:为每个查询的IPv6地址创建一个`IPv6Bean`实例,存储IP地址本身以及后续查询得到的地理位置信息。 3. **执行查询**:在`IpV6Seeker`类中,实现一个方法,接受IPv6地址作为参数,使用ZX库的...
使用时,你可以通过编程语言(如Python、Java、C#等)读取IP地域对照表文件,然后通过比较目标IP地址与表中的IP范围,查找对应的地理位置。对于大型的IP库,可以考虑使用数据库管理系统进行高效查询。如果选择使用...
在开发Web应用程序时,有时我们需要获取并记录用户的IP地址,以便了解用户来自哪里,这有助于进行数据分析、安全监控以及提供地域性服务。本项目“jsp程序 用户IP地址所在地记录”正是针对这一需求而设计的。它包含...
标题中的“IP地址转城市 通过IP得知访客地址 全国各地IP地址数据库”指的是一个用于定位IP地址对应地理位置的数据库系统。这样的系统通常包含了大量IP地址范围及其对应的省份和城市信息,使得开发者和服务提供商能够...
本文将详细介绍几种在JSP环境中获取客户端IP地址的有效方法,并提供实际的代码示例。 #### 二、获取客户端IP地址的重要性 1. **安全性**:通过识别用户的真实IP地址,可以帮助防止恶意攻击。 2. **统计分析**:收集...
为了使用这个数据库,你需要先解压“ip.7z”文件,然后使用适当的工具(如Python、Java或PHP)读取并解析“ip”文件,接着通过编程接口(API)或者直接查询来获取特定IP地址的位置信息。 总的来说,这个资源为...
标题中的“IP所属地域查询”指的是通过特定的技术手段获取一个IP地址所对应的地理位置信息。在互联网上,每个设备在连接网络时都会被分配一个唯一的IP地址,这个地址可以用来识别设备在网络上的位置。IP归属地查询是...
总之,"handsome获取ip+地区工具包"提供了一种便捷的方式来获取和解析客户端IP地址,并结合纯真IP数据库提供地区信息。这对于需要进行地域性服务或数据分析的Java开发者来说,是一个非常实用的工具。
在IT行业中,根据IP地址判断用户所在城市是一项常见的任务,主要应用于地理位置服务、网络分析、个性化推荐等场景。这项技术的基础是IP地址与地理位置之间的映射关系,这通常通过IP库或者API服务来实现。 首先,...