您的位置:首页 > 编程语言 > Java开发

java根据IP获取用户所在地

2016-02-01 13:29 393 查看
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();  

          

    }  

  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息