`
zhaoxiongy
  • 浏览: 3812 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

查手机归属地

    博客分类:
  • java
 
阅读更多
网上找的代码,自己留着用。
package com.lecast.pg.common.sms;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
/** 
* 通过手机号码,获得该号码的归属地 
 *  
 * @author zhaoxy 
 * 
 */  
public class MobileFromUtil {  
   //正则表达式,抽取手机归属地  
   public static final String REGEX_GET_MOBILE=  
       "(?is)(<tr[^>]+>[\\s]*<td[^>]+>[\\s]*卡号归属地[\\s]*</td>[\\s]*<td[^>]+>([^<]+)</td>[\\s]*</tr>)"; //2:from  
   //正则表达式,审核要获取手机归属地的手机是否符合格式,可以只输入手机号码前7位  
   public static final String REGEX_IS_MOBILE=  
       "(?is)(^1[3|4|5|8][0-9]\\d{4,8}$)";  
     
   /** 
    * 获得手机号码归属地 
    *  
    * @param mobileNumber 
    * @return 
    * @throws Exception 
    */  
   public static String getMobileFrom(String mobileNumber) throws Exception {  
       if(!veriyMobile(mobileNumber)){  
           throw new Exception("不是完整的11位手机号或者正确的手机号前七位");  
       }  
       HttpClient client=null;  
       PostMethod method=null;  
       NameValuePair mobileParameter=null;  
       NameValuePair actionParameter=null;  
       int httpStatusCode;  
         
       String htmlSource=null;  
       String result=null;  
         
         
       try {  
           client=new HttpClient();  
           client.getHostConfiguration().setHost("www.ip138.com", 8080, "http");  
           method=new PostMethod("/search.asp");  
           mobileParameter=new NameValuePair("mobile",mobileNumber);  
           actionParameter=new NameValuePair("action","mobile");  
           method.setRequestBody(new NameValuePair[] { actionParameter,mobileParameter });   
           //设置编码  
           method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "GB2312");  
             
           client.executeMethod(method);  
           httpStatusCode=method.getStatusLine().getStatusCode();  
           if(httpStatusCode!=200){  
               throw new Exception("网页内容获取异常!Http Status Code:"+httpStatusCode);  
           }  
             
           htmlSource=method.getResponseBodyAsString();  
           if(htmlSource!=null&&!htmlSource.equals("")){  
               result=parseMobileFrom(htmlSource);  
           }  
       } catch (RuntimeException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }finally{  
           method.releaseConnection();  
       }  
         
       return result;  
         
   }  
 
 
   /** 
    * 从www.ip138.com返回的结果网页内容中获取手机号码归属地,结果为:省份 城市 
    *  
    * @param htmlSource 
    * @return 
    */  
   public static String parseMobileFrom(String htmlSource){  
       Pattern p=null;  
       Matcher m=null;  
       String result=null;  
         
       p=Pattern.compile(REGEX_GET_MOBILE);  
       m=p.matcher(htmlSource);  
         
       while(m.find()){  
           if(m.start(2)>0){  
               result=m.group(2);  
               result=result.replaceAll("&nbsp;", " ");  
           }  
       }  
         
         
       return result;  
         
   }  
      
    /** 
     * 验证手机号 
     * @param mobileNumber 
     * @return 
     */  
    public static boolean veriyMobile(String mobileNumber){  
        Pattern p=null;  
        Matcher m=null;  
          
        p=Pattern.compile(REGEX_IS_MOBILE);  
        m=p.matcher(mobileNumber);  
          
        return m.matches();  
    }  
      
    /** 
     * 测试 
     * @param args 
     * @throws Exception  
     */  
    public static void main(String[] args) throws Exception {  
       // System.out.println(getMobileFrom("159000000"));  
//    	BufferedReader bufferedReader = new BufferedReader(new FileReader(
//		"c:a.TXT"));
//		String str = null;
//		while ((str = bufferedReader.readLine()) != null) {
//			if (str.length()==11) {
//				GetMobileMarkFromWAPIP138(str);
//			}else{
//			System.out.println(str);	
//			}
//		}
		GetMobileMarkFromWAPIP138("132000000");
		
    }  
     public static void GetMobileMarkFromWAPIP138(String mobile7){
           System.out.print(mobile7+"  ");
          // 请求URL
          String REQUEST_URL = "http://wap.ip138.com/sim.asp";
          // 请求方法
          String REQUEST_MOTHOD = "GET";
          BufferedReader br = null;
  
          try {
              HttpURLConnection httpConn = (HttpURLConnection) new URL(REQUEST_URL).openConnection();
              httpConn.setRequestMethod(REQUEST_MOTHOD);
              httpConn.setDoOutput(true);
  
              String requestParameter = "mobile=" + mobile7;
              httpConn.getOutputStream().write(requestParameter.getBytes());
              httpConn.getOutputStream().flush();
              httpConn.getOutputStream().close();
  
              br = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));
  
              String lineStr = null;
  
              while ((lineStr = br.readLine()) != null) {
                  //Log.writeLog(lineStr);
                  lineStr = lineStr.toLowerCase().trim();
                  if(lineStr.equalsIgnoreCase("刷新太频繁<br/>")){
                 //     return null;
                  }
                  if (lineStr.indexOf("归属地") != -1) {
                       
                      lineStr = lineStr.replace("<br/>", "");
                      lineStr = lineStr.replace("归属地:", "");
                       
                      String[] areas = lineStr.split(" ", 2);
                      if (areas.length > 1) {
                    	  System.out.print(areas[0]+" "+areas[1]+"      ");
//                          mobileMarkInfo.setProvince(areas[0]);
//                          if (mobileMarkInfo.getProvince().equalsIgnoreCase("内蒙")) {
//                              mobileMarkInfo.setProvince("内蒙古");
//                          }
//                          mobileMarkInfo.setCity(areas[1]);
                      } else {
                       //   return null;
                      }                    
                  }
                  // 获取卡类型                
                  if (lineStr.indexOf("卡类型") != -1) {                     
                      lineStr = lineStr.replace("卡类型:", "");
                      lineStr = lineStr.replace("<br/>", "");    
                      System.out.println(lineStr);
                      //mobileMarkInfo.setMobileType(lineStr);                    
                  }
              }
               
          } catch (Exception e) {
              // e.printStackTrace();
           //   mobileMarkInfo = null;
              System.out.println("MobileUtil.GetMobileMarkFromWAPIP138 " + e.getMessage());
          } finally {
              if (br != null)
                  try {
                      br.close();
                  } catch (IOException e) {
                      // e.printStackTrace();
                      System.out.println("MobileUtil.GetMobileMarkFromWAPIP138 " + e.getMessage());
                  }
          }
        //  return mobileMarkInfo;
      }
}  
分享到:
评论

相关推荐

    查询手机归属地

    小雪群管 查询手机号码归属地 插件 绝对好用

    巧用EXCEL批量查询手机归属地

    巧用EXCEL批量查询手机归属地

    Andriod调用WebService查询手机归属地

    在Android平台上,调用WebService查询手机归属地是一个常见的任务,主要应用于电话号码分析、广告定向或者用户行为分析等场景。这个过程涉及到多个技术点,包括网络请求、数据解析以及WebService接口的调用。以下是...

    微信小程序Demo:手机归属地查询

    "手机归属地查询"的微信小程序Demo,旨在帮助用户快速查询手机号码的归属地信息,这在日常生活中非常实用,比如识别垃圾来电或者对未知号码的好奇心。 开发微信小程序涉及到以下几个核心知识点: 1. **微信开发者...

    对Com对象(WinHttp)的后期绑定的封装(C#通过IP138查询手机归属地)

    本项目涉及的是对WinHttp COM对象的后期绑定封装,具体应用是在C#中通过IP138网站查询手机归属地。 首先,我们要理解后期绑定的概念。后期绑定是指在运行时确定对象的方法或属性,而不是在编译时。与早期绑定(即...

    手机号码归属地查询

    在IT行业中,手机号码归属地查询是一项常见的服务,它能够帮助用户了解特定手机号码的注册地或运营商信息。这项服务通常基于Web Service技术实现,它允许不同系统间通过网络进行数据交互。以下是对这一主题的详细...

    手机归属地查询源码

    本资源名为"手机归属地查询源码",显然是一份用于实现查询手机归属地功能的Android应用程序源代码。这样的源码对Android开发者,尤其是初学者而言,具有极高的学习价值。下面将详细探讨这个知识点及其相关技术。 ...

    java 手机号码归属地查询代码

    可以通过在项目中添加此 form的代码,查询号码归属地

    批量查手机归属地.zip

    http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=你的手机号 1. **支持单个和批量查询** ,批量查询支持txt导入; 2. **支持查询数据导出** ; ## 此源码可以学习到的知识 1. **易语言超级表格...

    ip138手机归属地小偷 -ASP源码.zip

    软件包的标题“ip138手机归属地小偷”暗示了其功能:查询手机归属地信息。这个功能在互联网上有着广泛的用途,比如帮助用户识别来电号码的来源,或者用于电话号码的数据分析。由于人们对来电号码的来源信息有需求,...

    手机归属地查询

    在IT行业中,手机归属地查询是一项常见的功能,它允许用户通过输入手机号码来获取该号码的注册地或运营商信息。这个“手机归属地查询”的项目是针对安卓平台设计的,对于初学者来说,是一个很好的学习实践案例。接...

    C# 手机归属地查询

    本项目"手机归属地查询"是基于C# WinForm平台实现的一个实用工具,旨在帮助用户快速查询手机号码的归属地信息。WinForm是.NET Framework提供的一种用于构建桌面应用程序的图形用户界面(GUI)框架。 在C# WinForm...

    手机归属地查询PHP

    在IT行业中,手机归属地查询是一项常见的服务,它允许用户通过输入手机号码来获取该号码的注册地或最初分配地信息。"手机归属地查询PHP"项目是利用PHP编程语言实现这一功能的一个实例。PHP是一种广泛应用的开源脚本...

    iOS 手机查询归属地

    在iOS应用中查询手机归属地,主要是获取并展示电话号码对应的运营商信息和大致地理位置。 1. **网络请求**:在iOS应用中,我们可以使用Apple提供的`URLSession`框架来发起网络请求。通过HTTP或HTTPS协议,向提供...

    手机号码归属地查询asp版

    总的来说,这个"手机号码归属地查询asp版"是一个轻量级的应用,适用于快速集成到其他网站或者作为独立的服务,供用户查询手机归属地。其技术栈包括ASP脚本语言、Access数据库以及可能的数据更新机制。开发和维护这样...

    java实现手机归属地查询

    在IT行业中,手机归属地查询是一项常见的需求,特别是在电信服务、市场营销或数据分析等领域。本项目以Java编程语言为核心,实现了对手机号码归属地的查询功能。以下是对这一技术的详细阐述: 首先,我们要理解手机...

    手机号码归属地查询系统-源代码

    《手机号码归属地查询系统-源代码》是一个基于C#、.NET框架和SQL数据库的软件项目,旨在实现对手机号码归属地的实时查询功能。本文将深入探讨这个系统的架构、关键技术及其应用。 首先,C#是Microsoft开发的一种...

    PHP+MYSQL实现手机归属地查询

    这通常涉及到购买或爬取第三方提供的手机归属地数据。数据更新也需要定期进行,因为手机号码的归属地可能会因用户迁移或运营商调整而发生变化。 3. **PHP处理**: - **接收请求**:用户在前端输入手机号码后,PHP...

    手机号码归属地查询 手机号码归属地查询

    手机号码归属地查询手机号码归属地查询手机号码归属地查询手机号码归属地查询手机号码归属地查询

Global site tag (gtag.js) - Google Analytics