java 根据IP地址获取地理位置
来源:http://www.ipplus360.com/tech/api/
来源:http://blog.csdn.net/Cryhelyxx/article/details/40862101
精确查询坐标:埃文
接口描述:查询IP所在的位置可精确到街道级别 (此接口默认返回经纬度为WGS84坐标系,其他坐标系请参考示例)
接口地址:https://mall.ipplus360.com/ip
请求方式:HTTPS GET
请求示例:https://mall.ipplus360.com/ip/locate/api?key=您申请的KEY&ip=您需要查询的ip&coordsys=WGS84
QUERY请求参数
名称 类型 必填 示例值 描述
key String 是 您申请的key
ip String 是 8.8.8.8 查询的IP
coordsys String 否 BD09/WGS84 坐标系名称(二选一)
返回参数
名称 类型 示例值 描述
code number 200 状态码
ip String 8.8.8.8 查询的IP
charge Boolean true 是否需要充值
coordsys String BD09/WGS84 坐标系名称
data Object {...} 返回的数据
msg String 查询成功 状态码描述
返回示例值{"code": 200,"ip": "8.8.8.8","charge": true,"coordsys": "WGS84","data": {"continent": "北美洲","country" : "美国","zipcode" : "","timezone" : "UTC+8","accuracy" : "国家","owner" : "Google","source" : "数据挖掘","correctness" : 1,"consistency" : 1,"multiAreas": [{"lat": "39.825700", //默认返回WGS84坐标系 纬度"lng": "-82.945500",//默认返回WGS84坐标系 经度"radius": "","prov": "","city": "","district": "",}],},"msg": "查询成功"}1. 第三方APIps:下面参数ip: 218.192.3.42 用于测试淘宝API:http://ip.taobao.com/service/getIpInfo.php?ip=218.192.3.42新浪API:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42pconline API:http://whois.pconline.com.cn/百度API:http://api.map.baidu.com/location/ip?ip=218.192.3.422. 工具类AddressUtils.java[java] view plain copyimport 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地址获取详细的地域信息 * 淘宝API : http://ip.taobao.com/service/getIpInfo.php?ip=218.192.3.42 * 新浪API : http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42 * @File AddressUtils.java * @Package org.gditc.weicommunity.util * @Description TODO * @Copyright Copyright © 2014 * @Site https://github.com/Cryhelyxx * @Blog http://blog.csdn.net/Cryhelyxx * @Email cryhelyxx@gmail.com * @Company GDITC * @Date 2014年11月6日 下午1:46:37 * @author Cryhelyxx * @version 1.0 */ public class AddressUtils { /** * * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return * @throws UnsupportedEncodingException */ public static String getAddresses(String content, String encodingString) throws UnsupportedEncodingException { // 这里调用淘宝API String urlStr = "http://ip.taobao.com/service/getIpInfo.php"; // 从http://whois.pconline.com.cn取得IP所在的省市区信息 String returnStr = getResult(urlStr, content, encodingString); if (returnStr != null) { // 处理返回的省市区信息 System.out.println("(1) unicode转换成中文前的returnStr : " + returnStr); returnStr = decodeUnicode(returnStr); System.out.println("(2) unicode转换成中文后的returnStr : " + returnStr); String[] temp = returnStr.split(","); if(temp.length<3){ return "0";//无效IP,局域网测试 } return returnStr; } return null; } /** * @param urlStr * 请求的地址 * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return */ private static 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); // 输出结果为:广东省,广州市,越秀区 } } 3. 测试方法下面采用单元测试[java] view plain copy@Test public void getAddressByIp() throws Exception { // 参数ip String ip = "219.136.134.157"; // json_result用于接收返回的json数据 String json_result = null; try { json_result = AddressUtils.getAddresses("ip=" + ip, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } JSONObject json = JSONObject.fromObject(json_result); System.out.println("json数据: " + json); String country = JSONObject.fromObject(json.get("data")).get("country").toString(); String region = JSONObject.fromObject(json.get("data")).get("region").toString(); String city = JSONObject.fromObject(json.get("data")).get("city").toString(); String county = JSONObject.fromObject(json.get("data")).get("county").toString(); String isp = JSONObject.fromObject(json.get("data")).get("isp").toString(); String area = JSONObject.fromObject(json.get("data")).get("area").toString(); System.out.println("国家: " + country); System.out.println("地区: " + area); System.out.println("省份: " + region); System.out.println("城市: " + city); System.out.println("区/县: " + county); System.out.println("互联网服务提供商: " + isp); String address = country + "/"; address += region + "/"; address += city + "/"; address += county; System.out.println(address); } 4. 打印结果下面是eclipse控制台的打印结果[plain] view plain copy(1) unicode转换成中文前的returnStr : {"code":0,"data":{"country":"\u4e2d\u56fd","country_id":"CN","area":"\u534e\u5357","area_id":"800000","region":"\u5e7f\u4e1c\u7701","region_id":"440000","city":"\u5e7f\u5dde\u5e02","city_id":"440100","county":"\u8d8a\u79c0\u533a","county_id":"440104","isp":"\u7535\u4fe1","isp_id":"100017","ip":"219.136.134.157"}} (2) unicode转换成中文后的returnStr : {"code":0,"data":{"country":"中国","country_id":"CN","area":"华南","area_id":"800000","region":"广东省","region_id":"440000","city":"广州市","city_id":"440100","county":"越秀区","county_id":"440104","isp":"电信","isp_id":"100017","ip":"219.136.134.157"}} json数据: {"code":0,"data":{"country":"中国","country_id":"CN","area":"华南","area_id":"800000","region":"广东省","region_id":"440000","city":"广州市","city_id":"440100","county":"越秀区","county_id":"440104","isp":"电信","isp_id":"100017","ip":"219.136.134.157"}} 国家: 中国 地区: 华南 省份: 广东省 城市: 广州市 区/县: 越秀区 互联网服务提供商: 电信 中国/广东省/广州市/越秀区 OK, Enjoy it!!!
java 根据IP地址获取地理位置相关推荐
- java 根据ip地址获取地理位置及运营商。
1.基于淘宝API /** * 根据ip获取城市(运营商)名称 * @param ip * @return * @throws Exception * ...
- java根据ip地址获取城市地域信息
java根据ip地址获取城市地域信息 这里提供两个公开的接口,一个是阿里的,一个是新浪的 http://ip.taobao.com/service/getIpInfo.php?ip=123.139.9 ...
- C# 网络编程之通过ip地址获取地理位置(补充)
前面我写过一篇文章"C# 网络编程之获取本机名.ip地址.域名.物理位置"里面可以根据输入的网址根据其ip地址获取器物理位置,其中该部分主要代码是通过有道网提供的在线第三方接口实现 ...
- Java 根据IP地址获取城市(ip2region)
根据IP地址获取城市(ip2region) Ip2region是什么? Ip2region特性 99.9%准确率 标准化的数据格式 体积小 查询速度快 多查询客户端的支持 maven集成 小坑 Ip2 ...
- 根据IP地址获取地理位置
之前做了一个天气预报,里面就用到了根据IP自动定位技术,今天就给大家分享一波:根据IP地址自动定位. 想要实现根据IP地址定位,你要做的事有如下两点: 第一:获取本机的IP地址 注意:这里指的是公网的 ...
- 【转载】 java根据ip地址获取详细地域信息
互联网有很多接口可以实现通过ip查询到具体的位置,如下: 通过淘宝IP地址库获取IP位置 1. 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php ...
- java通过ip地址获取相应对应的城市
发现了一比较好的本地ip对应地址的库资源文件--做一下笔记. 官方网站 https://dev.maxmind.com/geoip/geoip2/geolite2/ 这里提供了免费的库文件,还有很好的 ...
- 根据ip地址获取地理位置及坐标
根据ip获取地理位置信息,不用http和webservice接口,减少请求时间.我们可以利用了GeoLite2 库,GeoLite2 数据库是一个免费的 IP 地理定位数据库,GeoLite2 Cou ...
- JAVA根据IP地址获取省份城市和经纬度(可获取国家名称 淘宝高德API如果是国外IP获取到的为空)
所需jar包maven地址: <!-- 根据ip获取位置 --><dependency><groupId>com.maxmind.geoip2</groupI ...
最新文章
- 破解制造业困局:从实际案例看制造业如何缩短订单交付周期?
- 各大互联网大厂年终奖一览表!
- 字节跳动李本超:一年成为 Committer,我与 Flink 社区的故事
- Xml解析作业与Xml建模andXml建模作业
- UVAOJ1586题解
- labelImg 使用以及安装教程---图像标注工具
- 如何进入mysql命令界面
- ArduinoUNO实战-第十五章-液晶LCD1602实验
- 列联表分析-独立性检验
- MATLAB实现Enigma 密码机
- 高盛报告:人工智能、机器学习和数据将推动未来生产力的发展
- 银行招聘笔试计算机知识,【银行招聘】银行考试笔试中的综合知识考什么?
- nodejs+vue+elementui 青少年编程在线考试系统python java php
- C++三目运算符(简述)
- Linux 系统管理 : usermod 命令详解
- IVD行业常见的核酸提取方法及原理
- SAP MIRO付款条件与折扣
- 快速加密、解密压缩包密码
- Java 之父Oracle
- linux中文件内容是乱码怎么办,Linux中文本的中文乱码怎么办
热门文章
- 关于Vmware Workstation 安装 MAC OS
- 如何做好独立的B2C商城系统运营,实现转化与交易?——甲由科技
- 计算机毕业设计(附源码)python休闲网络宾馆管理
- VTP(VLAN的中继协议VLAN Trunking Protocol)
- proj Java_proj 一个炫酷的飞机大战java游戏,很好玩的,很酷炫 用了 的图形界面 Games 256万源代码下载- www.pudn.com...
- (12)全民小视频引流脚本模块化开发06-已关注用户取关By飞云脚本学院
- 通过MODBUS转ETHERNET IP网关将变送器接入AB PLC
- ESP32-C3开发之旅 基础篇6 ESP32-C3 SPI通信
- 【bug】Failed at the node-sass@4.14.1 postinstall script(终于圆满解决)
- ipc_namespace