Java專案開發心得(一):利用Java技術實現查詢手機號碼歸屬地
鑑於最近專案涉及到查詢歸屬地的問題,今天在此做一下技術分享,如果有更好的建議,還請讀者大神指出。
迴歸正題,關於手機號碼歸屬地,想要查詢的無非是執行商、省份、市之類的資訊,那麼就會涉及到Http請求以及相關的第三方查詢介面。好的,下面就開始講重點了。
首先,你得有一個請求地址也就是第三方的介面地址,否則,鬼知道你要往哪邊跑。目前,大部分的第三方介面都差不多,例如:http://apis.juhe.cn/mobile/get
還有一個,就是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();
}
總結下來,用的東西不多,不過有些東西需要考慮清楚,很簡單的一個案例,希望可以對需要的人有些幫助。