打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# Winform实现手机号码归属地查询工具

摘要:本文介绍使用C#开发基于Winform的手机号码归属地查询工具,并提供详细的示例代码供参考。

一、需求描述

输入正确的手机号码,查询该号码的归属地和其他相关信息。

二、需求分析

1、实现手机号码归属地查询的方法

01、本地数据库存储信息,查询本地库

02、调用WebService查询

03、通过Http请求Get方式从服务器上获取数据

2、方式分析:

01、采用本地数据库存储,可以断网查询,无需付费,但信息量较大占用本地资源

02、调用WebService必须连接网络,不占用本地资源,但公开的WebService大多数需要付费。

03、通过Http请求Get方式从服务器上获取数据的方式必须连接网络,不占用本地资源,无需付费。

通过以上分析,决定采用第3种方式实现

三、实现思路

寻找免费的手机号码归属地查询网址

通过一番寻找和对比,决定使用“手机号码归属地数据库API”这个网站上的查询接口。

首页地址:http://vip.showji.com/locating/help.htm

查询地址(返回结果页面):http://api.showji.com/Locating/query.aspx?m=手机号码

查询地址(返回xml数据):http://vip.showji.com/locating/?m=手机号码

通过跟踪调试网站的JS代码,发现返回结果页面是使用$("txtMobile").innerHTML=obj["Mobile"];的方式赋值的,这样的话页面是有值的,但查看源代码发现结果为空,所以无法通过抓取网页源码来提取结果值。

经过分析和反复试验发现,查询结果可以直接发回xml格式的数据,哈哈,亲,要的就是你。

有了xml数据就好办了,通过抓取网页Html代码,用一个string变量存储xml格式的数据,然后通过分析xml数据得到手机号码归属地信息。

四、实现方法(代码)

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.IO;using System.Xml;namespace QueryLocating{    public partial class formQueryLocating : Form    {        //Html网页代码        private string htmlCode = string.Empty;        //运营商        private  string corp = string.Empty;        //手机卡类型        private  string card = string.Empty;        public formQueryLocating()        {            InitializeComponent();        }        /// <summary>        /// 查询        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnQuery_Click(object sender, EventArgs e)        {            if (txtm.Text.Trim().ToString() != "")            {                //抓取网页html代码                htmlCode = GetStringByUrl("http://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);            }        }        /// <summary>        /// 查询手机号码归属地        /// </summary>        /// <param name="htmlCode">网页Html代码</param>        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;                }            }        }        /// <summary>        /// 抓取网页html代码        /// </summary>        /// <param name="strUrl">URL</param>        /// <returns></returns>        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;        }    }}

最终效果图:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
批量手机号码归属地查询
如何批量查询手机号码归属地
手机号码归属地查询
手机号码段的归属
一个免费的API-手机号码归属地API接口
.net手机号码归属地导入
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服