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[].InnerText.ToString() == "False")
MessageBox.Show("您输入的手机号码格式有误,请重新输入!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
continue;
//手机号码
case "Mobile":
txtMobile.Text = elemList[].InnerText;
break;
//所属省份
case "Province":
txtProvince.Text = elemList[].InnerText;
break;
//所属城市
case "City":
txtCity.Text = elemList[].InnerText;
break;
//区号
case "AreaCode":
txtAreaCode.Text = elemList[].InnerText;
break;
//邮编
case "PostCode":
txtPostCode.Text = elemList[].InnerText;
break;
//运营商
case "Corp":
corp = elemList[].InnerText;
break;
//卡类型
case "Card":
card = elemList[].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;
}
}
}
最终效果图:



源代码:http://files.cnblogs.com/jara/QueryLocating.rar
C# Winform实现手机号码归属地查询工具的更多相关文章
- 【原创】Java实现手机号码归属地查询
网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属 ...
- 免费的手机号码归属地查询API接口文档
聚合数据手机号码归属四查询API接口,根据手机号码或手机号码的前7位,查询手机号码归属地信息,包括省份 .城市.区号.邮编.运营商和卡类型. 通过链接https://www.juhe.cn/docs/ ...
- 本地的手机号码归属地查询-oracle数据
最近做的项目中,有个功能是手机归属地查询,因为项目要在内网下运行,所以不能用提供的webservice,只好在网上找手机归属地的数据,很多都是access的,我们的项目是用oracle,只好自己转吧, ...
- 百度手机号码归属地查询api与返回json处理
前天无意间在网上看到百度ApiStore,然后好奇就进去看了看.正好最近在某博培训Android,刚学到java基础.抱着锻炼的心态选择手机号码归属地查询api进行练手.api地址 (http://a ...
- PHP实现 手机号码归属地查询
在工作中需要对手机号码进行归属地查询,就在网上找了下解决方案,发现通过号段非常好判断. 我将数据库文件放到了百度网盘,请有需要的朋友去下载. 链接: https://pan.baidu.com/s/1 ...
- java 手机号码归属地查询
下面是利用第三方接口实现手机号码归属地查询 (复制请标明出处或留言) package com.test.yyc; import java.io.BufferedReader; import java. ...
- 手机号码归属地查询api接口
淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...
- PHP手机号码归属地查询API接口
淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...
- 手机号码归属地查询免费api接口代码
依据手机号码查询用户的卡类型.运营商.归属地.区域等信息. 手机归属地实体类 package org.wx.xhelper.model; /** * 手机归属地 * @author wangxw * ...
随机推荐
- 剑指Offer——链表中环的入口结点
题目描述: 一个链表中包含环,请找出该链表的环的入口结点. 分析: 设置两个指针p1,p2, 两个指针都从链表的头部开始走,不过p1每次走一步,p2每次走两步. 直到相遇的时候,p2走的长度是p1的两 ...
- LeetCode_链表操作1—Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...
- Android设置透明状态栏和透明导航栏
Android透明状态栏只有在4.4之后有. 在代码中加入下面几行代码即可实现
- Mysql索引长度和区分度
首先 索引长度和区分度是相互矛盾的, 索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,但是索引也是要占内存的,所以我们需要找到一个平衡点: 那么这个平衡点怎么来定? 比如用户表有个字段 ...
- dos常用命令【总结】
win7下有很多有用的dos命令,现在总结如下: 延伸:Linux常用命令[总结] 命令 作用 其他 ping 检查和另一台主机的连通性 ping 127.0.0.1 telnet 检查连通性 ...
- 联想yoga table2 1371f 进入bios 的巧妙方法
win8.1 的平板,无键盘,触屏失灵,接了个鼠标 我在这里向大家介绍最后一个方法<ignore_js_op>▲在metro界面下找到设置选项 <ignore_js_op> ...
- IDEA中打包Spark项目提示Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式
在idea中新建了一Spark的项目,在做项目的编译打包的时候,提示如下错误信息: Error:(, ) java: -source 1.5 中不支持 lambda 表达式 (请使用 -source ...
- 详解MySQL第一篇—MySQL简要介绍及DDL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- 转 Merkle Tree(默克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节 ...
- 安装es6转码工具babel,具体步骤
新建文件夹:testBabel 全局安装Babel:npm install babel-cli -g //babel的命令会成为全局变量,可以直接使用,一般全局后还要装本地(本工程目录) 初始化:np ...