问题描述
packagecom.mobile.util;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.apache.commons.httpclient.HttpClient;importorg.apache.commons.httpclient.NameValuePair;importorg.apache.commons.httpclient.methods.PostMethod;importorg.apache.commons.httpclient.params.HttpMethodParams;/***通过手机号码,获得该号码的归属地*@authorAdministrator*/publicclassMobileFromUtil{//正则表达式,抽取手机归属地publicstaticfinalStringREGEX_GET_PROVINCE="查询结果.*?-->(.*?)&";publicstaticfinalStringREGEX_GET_CITY="";publicstaticfinalStringREGEX_GET_TYPE="";publicstaticfinalStringREGEX_GET_MOBILE="(?is)<td.*?>您查询的手机号码段</td>.*?<td.*?>(.*?)</td>.*?<td.*?>卡号归属地</td>.*?<td.*?>(.*?)</td>.*?<td.*?>卡 类 型</td>.*?<td.*?>(.*?)</td>";//正则表达式,审核要获取手机归属地的手机是否符合格式,可以只输入手机号码前7位publicstaticfinalStringREGEX_IS_MOBILE="(?is)(^1[3|4|5|8][0-9]\d{4,8}$)";/***获得手机号码归属地*@parammobileNumber*@return*@throwsException*/publicstaticStringgetMobileFrom(StringmobileNumber)throwsException{if(!veriyMobile(mobileNumber)){thrownewException("不是完整的11位手机号或者正确的手机号前七位");}HttpClientclient=null;PostMethodmethod=null;NameValuePairmobileParameter=null;NameValuePairactionParameter=null;inthttpStatusCode;StringhtmlSource=null;Stringresult=null;try{client=newHttpClient();client.getHostConfiguration().setHost("www.ip138.com",8080,"http");method=newPostMethod("/search.asp");mobileParameter=newNameValuePair("mobile",mobileNumber);actionParameter=newNameValuePair("action","mobile");method.setRequestBody(newNameValuePair[]{actionParameter,mobileParameter});//设置编码method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GB2312");client.executeMethod(method);httpStatusCode=method.getStatusLine().getStatusCode();if(httpStatusCode!=200){thrownewException("网页内容获取异常!HttpStatusCode:"+httpStatusCode);}htmlSource=method.getResponseBodyAsString();if(htmlSource!=null&&!htmlSource.equals("")){result=parseMobileFrom(htmlSource);}}catch(RuntimeExceptione){e.printStackTrace();}finally{method.releaseConnection();}returnresult;}/***从返回的结果网页内容中获取手机号码归属地,结果为:省份城市*@paramhtmlSource*@return*/publicstaticStringparseMobileFrom(StringhtmlSource){Patternp1=null;Matcherm1=null;Stringresult1=null;htmlSource=htmlSource.replaceAll("<!--.*?-->","");p1=Pattern.compile(REGEX_GET_MOBILE);m1=p1.matcher(htmlSource);if(m1.find()){System.out.println(m1.group(1)+","+m1.group(2).replace(" ",",")+","+m1.group(3));}returnresult1;}/***验证手机号*@parammobileNumber*@return*/publicstaticbooleanveriyMobile(StringmobileNumber){Patternp=null;Matcherm=null;p=Pattern.compile(REGEX_IS_MOBILE);m=p.matcher(mobileNumber);returnm.matches();}/***测试*@paramargs*@throwsException*/publicstaticvoidmain(String[]args)throwsException{getMobileFrom("13888888888");}}执行之后报这个错:Exceptioninthread"main"java.lang.Exception:网页内容获取异常!HttpStatusCode:403atcom.mobile.util.MobileFromUtil.getMobileFrom(MobileFromUtil.java:52)atcom.mobile.util.MobileFromUtil.main(MobileFromUtil.java:103)jar包:commons-codec-1.6.jarcommons-logging-1.1.1.jarcommons-httpclient-3.1.jar403错误是禁止访问,但是我直接在浏览器上www.ip138.com查询,可以访问的,这是怎么回事?
解决方案
本帖最后由 sc19860709 于 2012-11-09 15:56:51 编辑
解决方案二:
这类问题都没什么人回复啊,楼主解决了没?
解决方案三:
403权限问题,有可能是跨域请求之类的都有可能