教程集 www.jiaochengji.com
教程集 >  脚本编程  >  Asp.net  >  正文 c# winform 手机号码归属地查询工具的实现代码(图文)

c# winform 手机号码归属地查询工具的实现代码(图文)

发布时间:2016-01-27   编辑:jiaochengji.com
为大家介绍使用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数据得到手机号码归属地信息。

四、实现方法(代码)
 

复制代码 代码示例:

//公共变量
//Html网页代码
private string htmlCode = string.Empty;
//运营商
private string corp = string.Empty;
//手机卡类型
private string card = string.Empty;

抓取网页Html代码
/// <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;
}

查询号码归属地
/// <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>
/// 查询
/// </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);
}
}

效果图如下所示(三张图片):
手机号码查询一

手机号码查询二

手机号码查询三

附:c# winform 手机号码归属地查询工具的源代码下载。

您可能感兴趣的文章:
c# winform 手机号码归属地查询工具的实现代码(图文)
c# winfrom 手机号码归属地查询的简单例子(图文)
PHP手机号码归属地查询代码(API接口/mysql)
c# 天气预报查询(winform方法)的实现代码(图文)
c# 手机号码归属地查询的实现代码(图文)
手机号码归属地查询
php 手机归属地查询函数详解
javascript 验证手机号码的正则应用举例
手机号码归属地查询代码
shell脚本使用curl批量解析号码归属地

[关闭]
~ ~