Java项目开发心得(一):利用Java技术实现查询手机号码归属地

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuyaorong/article/details/53255998

      鉴于最近项目涉及到查询归属地的问题,今天在此做一下技术分享,如果有更好的建议,还请读者大神指出。

      回归正题,关于手机号码归属地,想要查询的无非是运行商、省份、市之类的信息,那么就会涉及到Http请求以及相关的第三方查询接口。好的,下面就开始讲重点了。

      首先,你得有一个请求地址也就是第三方的接口地址,否则,鬼知道你要往哪边跑。目前,大部分的第三方接口都差不多,例如:http://apis.juhe.cn/mobile/get。问题在于后面需要传入的手机号、申请到的关键钥匙KEY以及数据类型。当然,数据类型这块可以先不考虑,关键钥匙KEY需要自己去申请,这点很重要,没有钥匙去开毛线锁。
还有一个,就是userAgent,这东西百度百科给出的解释是用户代理,其实无非是让服务器去识别用户的操作系统以及版本,浏览器引擎相关之类的信息,这个也比较重要,否则容易出现页面不能正常显示。Http请求就比较简单了,变动不是很大。

  public static String net(String strUrl, Map<String,String> map,String method) throws Exception {
       HttpURLConnection conn = null;
       BufferedReader reader = null;
       String rs = null;
       try {
           StringBuffer sb = new StringBuffer();
           if((method==null || method.equals("GET")) && map!=null){
               strUrl = strUrl+"?"+UrlEncode(map);
           }
           URL url = new URL(strUrl);
           conn = (HttpURLConnection) url.openConnection();
           if(method==null || method.equals("GET")){
               conn.setRequestMethod("GET");
           }else{
               conn.setRequestMethod("POST");
               conn.setDoOutput(true);
           }
           conn.setRequestProperty("User-agent", userAgent);
           conn.setUseCaches(false);
           conn.setConnectTimeout(DEF_CONN_TIMEOUT);
           conn.setReadTimeout(DEF_READ_TIMEOUT);
           conn.setInstanceFollowRedirects(false);
           conn.connect();
           if (map!= null && method.equals("POST")) {
               try {
                   DataOutputStream out = new DataOutputStream(conn.getOutputStream());
                   out.writeBytes(UrlEncode(map));
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
           InputStream is = conn.getInputStream();
           reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
           String strRead = null;
           while ((strRead = reader.readLine()) != null) {
               sb.append(strRead);
           }
           rs = sb.toString();
       } catch (IOException e) {
           e.printStackTrace();
       } finally {
           if (reader != null) {
               reader.close();
           }
           if (conn != null) {
               conn.disconnect();
           }
       }
       return rs;
   }

      接下来的事情就比较重点了,上面的方法是时候要起作用了。定义一个变量去接收net()方法返回的结果,然后转为json格式的数据。map存储传入数据键值对,然后通过json格式获取相应的数据。

  try {
            result =net(url, map, "GET");
            JSONObject object = JSONObject.fromObject(result);
            if(object.getInt("resultcode")==200){
                JSONObject jsonObject=object.getJSONObject("result");
                return jsonObject.getString("province")+"-"+jsonObject.getString("city");
            }else{
                return object.get("resultcode")+":"+object.get("reason");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }

    总结下来,用的东西不多,不过有些东西需要考虑清楚,很简单的一个案例,希望可以对需要的人有些帮助。

猜你喜欢

转载自blog.csdn.net/liuyaorong/article/details/53255998