文档章节

java根据IP获取用户所在地

墨鱼拉面
 墨鱼拉面
发布于 2016/11/01 09:17
字数 485
阅读 52
收藏 0
import java.io.BufferedReader;  
import java.io.DataOutputStream;  
import java.io.InputStreamReader;  
import java.net.HttpURLConnection;  
import java.net.URL;  
  
import org.json.JSONObject;  
  
public class AddressUtils {  
  
      
      
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        AddressUtils addressUtils = new AddressUtils();  
          
          String ip = "118.213.176.78";  
            
          String address = "";  
            
          try {  
                
           address = addressUtils.getAddress("ip="+ip, "utf-8");  
             
          } catch (Exception e) {  
                
              e.printStackTrace();  
          }  
            
          System.out.println(address);  
            
  
    }  
    /** 
     * 获取地址 
     * @param params 
     * @param encoding 
     * @return 
     * @throws Exception 
     */  
    public String getAddress(String params, String encoding) throws Exception{  
          
        String path = "http://ip.taobao.com/service/getIpInfo.php";  
          
        String returnStr = this.getRs(path, params, encoding);  
          
        JSONObject json=null;  
          
        if(returnStr != null){  
              
            json = new JSONObject(returnStr);  
              
            if("0".equals(json.get("code").toString())){  
                  
                StringBuffer buffer = new StringBuffer();  
                  
                //buffer.append(decodeUnicode(json.optJSONObject("data").getString("country")));//国家  
                  
                //buffer.append(decodeUnicode(json.optJSONObject("data").getString("area")));//地区  
                  
                buffer.append(decodeUnicode(json.optJSONObject("data").getString("region")));//省份  
                  
                buffer.append(decodeUnicode(json.optJSONObject("data").getString("city")));//市区  
                  
                buffer.append(decodeUnicode(json.optJSONObject("data").getString("county")));//地区  
                  
                buffer.append(decodeUnicode(json.optJSONObject("data").getString("isp")));//ISP公司  
                  
                System.out.println(buffer.toString());  
                  
                return buffer.toString();  
                  
            }else{  
                  
                return "获取地址失败�?";  
                  
            }  
              
        }  
          
        return null;  
          
    }  
    /** 
     * 从url获取结果 
     * @param path 
     * @param params 
     * @param encoding 
     * @return 
     */  
    public String getRs(String path, String params, String encoding){  
          
        URL url = null;  
          
        HttpURLConnection connection = null;  
              
        try {  
              
            url = new URL(path);  
                  
            connection = (HttpURLConnection)url.openConnection();// 新建连接实例  
                  
            connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫�?  
              
            connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫�?  
              
            connection.setDoInput(true);// 是否打开输出�? true|false  
              
            connection.setDoOutput(true);// 是否打开输入流true|false  
              
            connection.setRequestMethod("POST");// 提交方法POST|GET  
              
            connection.setUseCaches(false);// 是否缓存true|false  
              
            connection.connect();// 打开连接端口  
              
            DataOutputStream out = new DataOutputStream(connection.getOutputStream());  
              
            out.writeBytes(params);  
              
            out.flush();  
              
            out.close();  
              
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),encoding));  
              
            StringBuffer buffer = new StringBuffer();  
              
            String line = "";  
              
            while ((line = reader.readLine())!= null) {  
                  
                buffer.append(line);  
                  
            }  
              
            reader.close();  
              
            return buffer.toString();  
              
        } catch (Exception e) {  
              
            e.printStackTrace();  
              
        }finally{  
              
            connection.disconnect();// 关闭连接  
              
        }  
          
        return null;  
    }  
    /** 
     * 字符转码 
     * @param theString 
     * @return 
     */  
    public static String decodeUnicode(String theString){  
          
        char aChar;  
          
        int len = theString.length();  
          
        StringBuffer buffer = new StringBuffer(len);  
          
        for (int i = 0; i < len;) {  
              
            aChar = theString.charAt(i++);  
              
            if(aChar == '\\'){  
                  
                aChar = theString.charAt(i++);  
              
                if(aChar == 'u'){  
                      
                    int val = 0;  
                      
                    for(int j = 0; j < 4; j++){  
                          
                        aChar = theString.charAt(i++);  
                          
                        switch (aChar) {  
                          
                        case '0':  
                              
                        case '1':  
                              
                        case '2':  
                              
                        case '3':  
                              
                        case '4':  
                          
                        case '5':  
                              
                        case '6':  
                          
                        case '7':  
                              
                        case '8':  
                              
                        case '9':  
                              
                        val = (val << 4) + aChar - '0';  
                          
                        break;  
      
                        case 'a':  
                              
                        case 'b':  
                              
                        case 'c':  
                              
                        case 'd':  
                              
                        case 'e':  
                              
                        case 'f':  
                              
                        val = (val << 4) + 10 + aChar - 'a';  
                                 
                        break;  
                          
                        case 'A':  
                              
                        case 'B':  
                              
                        case 'C':  
                              
                        case 'D':  
                              
                        case 'E':  
                              
                        case 'F':  
                            
                        val = (val << 4) + 10 + aChar - 'A';  
                                 
                        break;  
                                 
                        default:  
                          
                        throw new IllegalArgumentException(  
                               
                            "Malformed      encoding.");  
                        }  
                          
                    }  
                      
                    buffer.append((char) val);  
                      
                    }else{  
                          
                        if(aChar == 't'){  
                              
                            aChar = '\t';  
                        }  
                          
                        if(aChar == 'r'){  
                              
                            aChar = '\r';  
                        }  
                          
                        if(aChar == 'n'){  
                              
                            aChar = '\n';  
                        }  
                          
                        if(aChar == 'f'){  
                              
                            aChar = '\f';  
                              
                        }  
                          
                        buffer.append(aChar);  
                    }  
                  
                }else{  
                      
                    buffer.append(aChar);  
                      
                }  
                  
            }  
          
        return buffer.toString();  
          
    }  
  
}  

 

本文转载自:

上一篇: Java new Exception
下一篇: java时间处理
墨鱼拉面
粉丝 0
博文 17
码字总数 1757
作品 0
深圳
程序员
私信 提问
nginx反向代理获取用户真实ip

nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用获取到的是nginx的ip地址,而不是用户的真实ip. 修改nginx配置,如下: 在原来...

yysue
2018/09/29
1K
0
01、Apache RocketMQ安装

准备工作 1、本次安装使用Virtual Box虚拟机进行安装,网卡采用 仅主机(Host-Only)网络+网络地址转换(NAT)方式来配置网络 如下图一 仅主机Host-Only网络 作为网卡1(用于主机之间通信使用) ...

北岩
05/12
67
0
网关中集成ip2region的方法

之前公司遇到的网络攻击中,虽然在虽然有记录ip的功能,但是ip地址的归属地在哪里是不知道的。只能在百度中查询一下,但是这个工作量会很大。所以最好是在网关中就能知道访问接口的ip地址归属...

miaojiangmin
05/05
43
0
使用 Java 开发兼容 IPv6 的网络应用程序

目前我们使用的是第二代互联网 IPv4 技术,它的最大问题是网络地址资源有限,从理论上讲,可以编址 1600 万个网络、40 亿台主机。但采用 A、B、C 三类编址方式后,可用的网络地址和主机地址的...

小编辑
2010/06/01
360
1
广州公司招聘java 程序员 本科2-5年经验 10W左右年薪(长期有效)

广州彩晶信息科技有限公司 聘请java程序员 email: glhdownload@163.com 在线咨询 msn glhdownload@163.com 地址 广州天河 华天国际广场 有意者请发简历到邮箱 职责 根据项目要求,派往客户所...

delphishare
2010/12/10
3.4K
33

没有更多内容

加载失败,请刷新页面

加载更多

Android面试常客之Handler全解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/fnhfire_7030/article/details/79518819 前言:又到了一年...

shzwork
17分钟前
3
0
position sticky 定位

本文转载于:专业的前端网站➫position sticky 定位 1、兼容性 https://caniuse.com/#search=sticky chrome、ios和firefox兼容性良好。 2、使用场景 sticky:粘性。粘性布局。 在屏幕范围内时...

前端老手
24分钟前
2
0
CentOS 7 yum 安装 PHP7.3 教程

参考:https://www.mf8.biz/centos-rhel-install-php7-3/ 1、首先安装 EPEL 源: yum install epel-release 安装 REMI 源: yum install http://rpms.remirepo.net/enterprise/remi-release......

dragon_tech
39分钟前
3
0
Linux物理网卡聚合及桥接

Linux内部实现的bridge可以把一台机器上的多张网卡桥接起来,从而把自己作为一台交换机。同时,LInux bridge还支持虚拟端口,即桥接的不一定都是物理网卡接口,还可以是虚拟接口。目前主要表...

xiangyunyan
39分钟前
3
0
一起来学Java8(一)——函数式编程

在这篇文章中,我们将了解到在Java8下如何进行函数式编程。 函数式编程 所谓的函数式编程就是把函数名字当做值进行传递,然后接收方拿到这个函数名进行调用。 首先来看下JavaScript如何进行函...

猿敲月下码
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部