现在的位置: 首页 > 综合 > 正文

java获取客户端登陆地址信息(国家、省份、城市等)

2018年06月09日 ⁄ 综合 ⁄ 共 3962字 ⁄ 字号 评论关闭

原文:java获取客户端登陆地址信息(国家、省份、城市等)

源代码下载地址:http://www.zuidaima.com/share/1550463687658496.htm

java获取客户端登陆地址信息(国家、省份、城市等)

 /**
  * @param urlStr
  *            请求的地址
  * @param content
  * @author www.zuidaima.com
  *            请求的参数 格式为: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;
 }
 
 /**
  * @Title: decodeUnicode 
  * @author kaka  
  * @Description: unicode转换成中文   
  * @param @param theString
  * @param @return    
  * @return String   
  * @throws
  */
 private 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();
}
 /**
  * 
  * @param content
  *            请求的参数 格式为:name=xxx&pwd=xxx
  * @param encoding
  *            服务器端请求编码。如GBK,UTF-8等
  * @return
  * @throws UnsupportedEncodingException
  */
 public static String getAddresses(String content, String encodingString) throws UnsupportedEncodingException {
	 String result = null;
	  StringBuffer sb = new StringBuffer();
	 // 这里调用pconline的接口
	 String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
	 // 从http://whois.pconline.com.cn取得IP所在的省市区信息
	 String returnStr = getResult(urlStr, content, encodingString);
 	 if (returnStr != null) {
 		 // 处理返回的省市区信息
	  	 String[] temp = returnStr.split(",");
	  	 if(temp.length<3){
	  		 return "0";//无效IP,局域网测试
	  	 }
	  	
	     String country = ""; 
	     String area = ""; 
	     String region = ""; 
	     String city = ""; 
	     String county = ""; 
	     String isp = ""; 
	     Boolean flag = false;
	     for(int i=0;i<temp.length;i++){
	    	 if(flag){
	    		 return result;
	    	 }
	    	 switch(i){ 
	    	 case 1:
	    		 country = (temp[i].split(":"))[2].replaceAll("\"", ""); 
	    		 country = decodeUnicode(country);//国家 
	    		 if(country.equals("未分配或者内网IP")){
	    			 flag = true;
	    			 sb.append(country);
	    			 result = sb.toString();
	    			 break;
	    		 }
	    		 sb.append("国家:");
	    		 sb.append(country);
	    		 sb.append(",");
	    		 break; 
	    	 case 3:
	    		 area =(temp[i].split(":"))[1].replaceAll("\"", ""); 
	    		 area = decodeUnicode(area);//地区 
	    		 break; 
	    	 case 5:
	    		 region = (temp[i].split(":"))[1].replaceAll("\"", ""); 
	    		 region = decodeUnicode(region);//省份 
	    		 sb.append("省份:");
	    		 sb.append(region);
	    		 sb.append(",");
	    		 break; 
	    	 case 7:
	    		 city = (temp[i].split(":"))[1].replaceAll("\"", ""); 
	    		 city = decodeUnicode(city);//市区 
	    		 sb.append("城市:");
	    		 sb.append(city);
	    		 sb.append(",");
	    		 break; 
	    	 case 9:
	    		 county = (temp[i].split(":"))[1].replaceAll("\"", ""); 
	    		 county = decodeUnicode(county);//地区
	    		 sb.append("地区:");
	    		 sb.append(county);
	    		 break; 
	    	 case 11:
	    		 isp = (temp[i].split(":"))[1].replaceAll("\"", ""); 
	    		 isp = decodeUnicode(isp);//ISP公司 
	    		 break; 
	    	 } 
	    }
	    result = sb.toString();
 	 }
  	 return result;
 }

抱歉!评论已关闭.