java根据IP获取用户所在地

  1. import java.io.BufferedReader;  
  2. import java.io.DataOutputStream;  
  3. import java.io.InputStreamReader;  
  4. import java.net.HttpURLConnection;  
  5. import java.net.URL;  
  6.   
  7. import org.json.JSONObject;  
  8.   
  9. public class AddressUtils {  
  10.   
  11.       
  12.       
  13.     /** 
  14.      * @param args 
  15.      */  
  16.     public static void main(String[] args) {  
  17.           
  18.         AddressUtils addressUtils = new AddressUtils();  
  19.           
  20.           String ip = "118.213.176.78";  
  21.             
  22.           String address = "";  
  23.             
  24.           try {  
  25.                 
  26.            address = addressUtils.getAddress("ip="+ip, "utf-8");  
  27.              
  28.           } catch (Exception e) {  
  29.                 
  30.               e.printStackTrace();  
  31.           }  
  32.             
  33.           System.out.println(address);  
  34.             
  35.   
  36.     }  
  37.     /** 
  38.      * 获取地址 
  39.      * @param params 
  40.      * @param encoding 
  41.      * @return 
  42.      * @throws Exception 
  43.      */  
  44.     public String getAddress(String params, String encoding) throws Exception{  
  45.           
  46.         String path = "http://ip.taobao.com/service/getIpInfo.php";  
  47.           
  48.         String returnStr = this.getRs(path, params, encoding);  
  49.           
  50.         JSONObject json=null;  
  51.           
  52.         if(returnStr != null){  
  53.               
  54.             json = new JSONObject(returnStr);  
  55.               
  56.             if("0".equals(json.get("code").toString())){  
  57.                   
  58.                 StringBuffer buffer = new StringBuffer();  
  59.                   
  60.                 //buffer.append(decodeUnicode(json.optJSONObject("data").getString("country")));//国家  
  61.                   
  62.                 //buffer.append(decodeUnicode(json.optJSONObject("data").getString("area")));//地区  
  63.                   
  64.                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("region")));//省份  
  65.                   
  66.                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("city")));//市区  
  67.                   
  68.                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("county")));//地区  
  69.                   
  70.                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("isp")));//ISP公司  
  71.                   
  72.                 System.out.println(buffer.toString());  
  73.                   
  74.                 return buffer.toString();  
  75.                   
  76.             }else{  
  77.                   
  78.                 return "获取地址失败�?";  
  79.                   
  80.             }  
  81.               
  82.         }  
  83.           
  84.         return null;  
  85.           
  86.     }  
  87.     /** 
  88.      * 从url获取结果 
  89.      * @param path 
  90.      * @param params 
  91.      * @param encoding 
  92.      * @return 
  93.      */  
  94.     public String getRs(String path, String params, String encoding){  
  95.           
  96.         URL url = null;  
  97.           
  98.         HttpURLConnection connection = null;  
  99.               
  100.         try {  
  101.               
  102.             url = new URL(path);  
  103.                   
  104.             connection = (HttpURLConnection)url.openConnection();// 新建连接实例  
  105.                   
  106.             connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫�?  
  107.               
  108.             connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫�?  
  109.               
  110.             connection.setDoInput(true);// 是否打开输出�? true|false  
  111.               
  112.             connection.setDoOutput(true);// 是否打开输入流true|false  
  113.               
  114.             connection.setRequestMethod("POST");// 提交方法POST|GET  
  115.               
  116.             connection.setUseCaches(false);// 是否缓存true|false  
  117.               
  118.             connection.connect();// 打开连接端口  
  119.               
  120.             DataOutputStream out = new DataOutputStream(connection.getOutputStream());  
  121.               
  122.             out.writeBytes(params);  
  123.               
  124.             out.flush();  
  125.               
  126.             out.close();  
  127.               
  128.             BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),encoding));  
  129.               
  130.             StringBuffer buffer = new StringBuffer();  
  131.               
  132.             String line = "";  
  133.               
  134.             while ((line = reader.readLine())!= null) {  
  135.                   
  136.                 buffer.append(line);  
  137.                   
  138.             }  
  139.               
  140.             reader.close();  
  141.               
  142.             return buffer.toString();  
  143.               
  144.         } catch (Exception e) {  
  145.               
  146.             e.printStackTrace();  
  147.               
  148.         }finally{  
  149.               
  150.             connection.disconnect();// 关闭连接  
  151.               
  152.         }  
  153.           
  154.         return null;  
  155.     }  
  156.     /** 
  157.      * 字符转码 
  158.      * @param theString 
  159.      * @return 
  160.      */  
  161.     public static String decodeUnicode(String theString){  
  162.           
  163.         char aChar;  
  164.           
  165.         int len = theString.length();  
  166.           
  167.         StringBuffer buffer = new StringBuffer(len);  
  168.           
  169.         for (int i = 0; i < len;) {  
  170.               
  171.             aChar = theString.charAt(i++);  
  172.               
  173.             if(aChar == '\\'){  
  174.                   
  175.                 aChar = theString.charAt(i++);  
  176.               
  177.                 if(aChar == 'u'){  
  178.                       
  179.                     int val = 0;  
  180.                       
  181.                     for(int j = 0; j < 4; j++){  
  182.                           
  183.                         aChar = theString.charAt(i++);  
  184.                           
  185.                         switch (aChar) {  
  186.                           
  187.                         case '0':  
  188.                               
  189.                         case '1':  
  190.                               
  191.                         case '2':  
  192.                               
  193.                         case '3':  
  194.                               
  195.                         case '4':  
  196.                           
  197.                         case '5':  
  198.                               
  199.                         case '6':  
  200.                           
  201.                         case '7':  
  202.                               
  203.                         case '8':  
  204.                               
  205.                         case '9':  
  206.                               
  207.                         val = (val << 4) + aChar - '0';  
  208.                           
  209.                         break;  
  210.       
  211.                         case 'a':  
  212.                               
  213.                         case 'b':  
  214.                               
  215.                         case 'c':  
  216.                               
  217.                         case 'd':  
  218.                               
  219.                         case 'e':  
  220.                               
  221.                         case 'f':  
  222.                               
  223.                         val = (val << 4) + 10 + aChar - 'a';  
  224.                                  
  225.                         break;  
  226.                           
  227.                         case 'A':  
  228.                               
  229.                         case 'B':  
  230.                               
  231.                         case 'C':  
  232.                               
  233.                         case 'D':  
  234.                               
  235.                         case 'E':  
  236.                               
  237.                         case 'F':  
  238.                             
  239.                         val = (val << 4) + 10 + aChar - 'A';  
  240.                                  
  241.                         break;  
  242.                                  
  243.                         default:  
  244.                           
  245.                         throw new IllegalArgumentException(  
  246.                                
  247.                             "Malformed      encoding.");  
  248.                         }  
  249.                           
  250.                     }  
  251.                       
  252.                     buffer.append((char) val);  
  253.                       
  254.                     }else{  
  255.                           
  256.                         if(aChar == 't'){  
  257.                               
  258.                             aChar = '\t';  
  259.                         }  
  260.                           
  261.                         if(aChar == 'r'){  
  262.                               
  263.                             aChar = '\r';  
  264.                         }  
  265.                           
  266.                         if(aChar == 'n'){  
  267.                               
  268.                             aChar = '\n';  
  269.                         }  
  270.                           
  271.                         if(aChar == 'f'){  
  272.                               
  273.                             aChar = '\f';  
  274.                               
  275.                         }  
  276.                           
  277.                         buffer.append(aChar);  
  278.                     }  
  279.                   
  280.                 }else{  
  281.                       
  282.                     buffer.append(aChar);  
  283.                       
  284.                 }  
  285.                   
  286.             }  
  287.           
  288.         return buffer.toString();  
  289.           
  290.     }  
  291.   
  292. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值