使用C#開發基於Winform的手機號碼歸屬地查詢工具
一、需求描述
輸入正確的手機號碼,查詢該號碼的歸屬地和其他相關信息。
二、需求分析
1、實現手機號碼歸屬地查詢的方法
01、本地數據庫存儲信息,查詢本地庫
02、調用WebService查詢
03、通過Http請求Get方式從服務器上獲取數據
2、方式分析:
01、采用本地數據庫存儲,可以斷網查詢,無需付費,但信息量較大占用本地資源
02、調用WebService必須連接網絡,不占用本地資源,但公開的WebService大多數需要付費。
03、通過Http請求Get方式從服務器上獲取數據的方式必須連接網絡,不占用本地資源,無需付費。
通過以上分析,決定采用第3種方式實現
三、實現思路
尋找免費的手機號碼歸屬地查詢網址
通過一番尋找和對比,決定使用“手機號碼歸屬地數據庫API”這個網站上的查詢接口。
首頁地址:https://vip.showji.com/locating/help.htm
查詢地址(返回結果頁麵):https://api.showji.com/Locating/query.aspx?m=手機號碼
查詢地址(返回xml數據):https://vip.showji.com/locating/?m=手機號碼
通過跟蹤調試網站的JS代碼,發現返回結果頁麵是使用$("txtMobile").innerHTML=obj["Mobile"];的方式賦值的,這樣的話頁麵是有值的,但查看源代碼發現結果為空,所以無法通過抓取網頁源碼來提取結果值。
經過分析和反複試驗發現,查詢結果可以直接發回xml格式的數據,哈哈,親,要的就是你。
有了xml數據就好辦了,通過抓取網頁Html代碼,用一個string變量存儲xml格式的數據,然後通過分析xml數據得到手機號碼歸屬地信息。
四、實現方法(代碼)
公共變量 //Html網頁代碼 private string htmlCode = string.Empty; //運營商 private string corp = string.Empty; //手機卡類型 private string card = string.Empty; 抓取網頁Html代碼 /// /// 抓取網頁html代碼 /// /// URL /// private static string GetStringByUrl(string strUrl) { //與指定URL創建HTTP請求 WebRequest wrt = WebRequest.Create(strUrl); //獲取對應HTTP請求的響應 WebResponse wrse = wrt.GetResponse(); //獲取響應流 Stream strM = wrse.GetResponseStream(); //對接響應流(以"GBK"字符集) StreamReader SR = new StreamReader(strM, Encoding.GetEncoding("UTF-8")); //獲取響應流的全部字符串 string strallstrm = SR.ReadToEnd(); //關閉讀取流 SR.Close(); //返回網頁html代碼 return strallstrm; } 查詢號碼歸屬地 /// /// 查詢手機號碼歸屬地 /// /// 網頁Html代碼 private void QueryLocating(string htmlCode) { //創建Xml實例 XmlDocument xmldoc = new XmlDocument(); //加載Xml文檔 xmldoc.LoadXml(htmlCode); //獲取Xml文檔的根元素 XmlElement root = xmldoc.DocumentElement; //獲取Xml文檔的根元素下的所有子節點 XmlNodeList topNode = xmldoc.DocumentElement.ChildNodes; //子節點集合 XmlNodeList elemList; //遍曆根元素下所有子節點 foreach (XmlElement element in topNode) { //根據節點名稱獲取節點元素值 elemList = root.GetElementsByTagName(element.Name); switch (element.Name) { //判斷手機號碼格式是否正確 case "QueryResult": if (elemList[0].InnerText.ToString() == "False") MessageBox.Show("您輸入的手機號碼格式有誤,請重新輸入!", "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Information); continue; //手機號碼 case "Mobile": txtMobile.Text = elemList[0].InnerText; break; //所屬省份 case "Province": txtProvince.Text = elemList[0].InnerText; break; //所屬城市 case "City": txtCity.Text = elemList[0].InnerText; break; //區號 case "AreaCode": txtAreaCode.Text = elemList[0].InnerText; break; //郵編 case "PostCode": txtPostCode.Text = elemList[0].InnerText; break; //運營商 case "Corp": corp = elemList[0].InnerText; break; //卡類型 case "Card": card = elemList[0].InnerText; //拚接字符串(運營商+卡類型) txtCard.Text = corp + card; break; } } } 調用查詢方法 /// /// 查詢 /// /// /// private void btnQuery_Click(object sender, EventArgs e) { if (txtm.Text.Trim().ToString() != "") { //抓取網頁html代碼 htmlCode = GetStringByUrl("https://vip.showji.com/locating/?m=" + txtm.Text.Trim().ToString()); //查詢手機號碼歸屬地 QueryLocating(htmlCode); } else { txtMobile.Text = ""; txtProvince.Text = ""; txtCity.Text = ""; txtAreaCode.Text = ""; txtPostCode.Text = ""; txtCard.Text = ""; MessageBox.Show("請輸入手機號碼!", "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
最終效果圖:
源碼下載:https://download.csdn.net/detail/luyaoapp/4150189
文章出處:https://qjb.573114.com/Blog/Html/121D/20244.html
最後更新:2017-04-03 14:54:02