【转载】 java根据ip地址获取详细地域信息
互联网有很多接口可以实现通过ip查询到具体的位置,如下:
通过淘宝IP地址库获取IP位置
用Java调用淘宝ip查询接口查询地域的一个java实例:
- 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;
- public class AddressUtils {
- 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<</span>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;
- }
- 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;
- }
- 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 = "125.70.11.136";
- String address = "";
- try {
- address = addressUtils.getAddresses("ip="+ip, "utf-8");
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println(address);
- // 输出结果为:广东省,广州市,越秀区
- }
- }
转载于:https://www.cnblogs.com/linewman/p/9918283.html
【转载】 java根据ip地址获取详细地域信息相关推荐
- java根据ip地址获取城市地域信息
java根据ip地址获取城市地域信息 这里提供两个公开的接口,一个是阿里的,一个是新浪的 http://ip.taobao.com/service/getIpInfo.php?ip=123.139.9 ...
- java 根据IP地址获取地理位置
来源:http://www.ipplus360.com/tech/api/ 来源:http://blog.csdn.net/Cryhelyxx/article/details/40862101 精确查 ...
- 6种根据IP地址获取相应城市信息的接口
发这篇文章的最主要的目的就是给大家分享一个 免费快捷根据IP地址获取相应城市信息的接口--腾讯接口 在找到个腾讯接口之前,我试也用了很多接口,比如:淘宝,新浪等,下面挨个介绍 (ps:$ip是IP地址 ...
- Java 根据IP地址获取城市(ip2region)
根据IP地址获取城市(ip2region) Ip2region是什么? Ip2region特性 99.9%准确率 标准化的数据格式 体积小 查询速度快 多查询客户端的支持 maven集成 小坑 Ip2 ...
- java通过ip地址获取相应对应的城市
发现了一比较好的本地ip对应地址的库资源文件--做一下笔记. 官方网站 https://dev.maxmind.com/geoip/geoip2/geolite2/ 这里提供了免费的库文件,还有很好的 ...
- JAVA根据IP地址获取省份城市和经纬度(可获取国家名称 淘宝高德API如果是国外IP获取到的为空)
所需jar包maven地址: <!-- 根据ip获取位置 --><dependency><groupId>com.maxmind.geoip2</groupI ...
- Java根据ip地址获取归属地
由于最近比较忙,所以一直没有更新博客.今天有一点点时间,来分享一下项目中用到的一个需求功能点. 需求描述:获取用户真实ip和ip归属地 实现效果: 重点: IP地址工具类 import cn.hut ...
- 获取地区html代码,根据ip地址获取所在城市信息(省市县)代码
[实例简介] [实例截图] [核心代码] 获取ip地址所在城市 var showIP = function(ip, remote_ip_info ){ if(remote_ip_info['ret'] ...
- 根据ip地址获取相关区域信息
<?php /*** 基于淘宝的ipAPI 根据ip地址 返回所在地* @author L.D.B* 2012/09/12*/ header("Content-type:text/ht ...
最新文章
- Python学习笔记2 基本数据类型
- RabbitMQ中的虚拟主机、交换机、消息队列、绑定、消息
- ACM: 畅通工程-并查集-解题报告
- [BZOJ2654] tree
- ch6 列表和导航条
- C语言 课设 最新版 学生成绩管理系统
- 自定义sort函数第三个参数的规则
- 【ES9(2018)】String 扩展 标签模板里字符串转义
- /etc目录下重要文件解释
- [实战] 用数人云,部署弹性 ELK 集群就五步 1
- 我的HTML学习之路03
- tensorflow 模型权重导出
- UDT中的epoll
- 156.PHP多进程
- linux 下录音软件,linux下录音软件Audacity[zt]
- MFC windows程序设计(第三版)课后习题第二章
- python源码打包成exe、exe反编译、pyd加密防止反编译
- 模拟器:思科 创建Vlan,给2层交换机和3层交换机配置IP地址和子网掩码
- Python的鸭子类型
- Python一行代码实现正三角形
热门文章
- Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
- 华章IT图书书讯(2012年第9期)
- 7.1.3 TimePicker结合案例详解
- sqlserver中,如果正确得到中文的长度
- Android开发之自定义TabHost文字及背景(源代码分享)
- 阿里P7面试官告诉你:3-5年以上的Android开发如何深入进阶?Android中高级开发必须掌握哪些?
- 深入理解WMS(三):剖析Activity,View,Window之间的关系
- Handler消息机制(一):Linux的epoll机制
- Android Dialog 全屏、Dialog 底部显示
- Android SystemTrace使用攻略