调用webservice获取电话号码归属地信息
首先什么是webservice ?
SOAP 1.2
以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。 POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: webservice.webxml.com.cn
Content-Type: application/soap+xml; charset=utf-
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getMobileCodeInfo xmlns="http://WebXml.com.cn/">
<mobileCode>string</mobileCode>
<userID>string</userID>
</getMobileCodeInfo>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 OK
Content-Type: application/soap+xml; charset=utf-
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
<getMobileCodeInfoResult>string</getMobileCodeInfoResult>
</getMobileCodeInfoResponse>
</soap12:Body>
</soap12:Envelope>
根据上面给出的xml得知,第一个xml文件是post要提交的数据,根据提示请求的数据需要用占位符
<mobileCode>$mobile</mobileCode> 这里给号码加入占位符
<userID></userID> 这个号码所对应的唯一编号,可以留空,因为不处理它
3.把post请求的xml文件拷贝到项目中,这里是拷贝到了src下面--post.xml
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getMobileCodeInfo xmlns="http://WebXml.com.cn/">
<mobileCode>$mobile</mobileCode>
<userID></userID>
</getMobileCodeInfo>
</soap12:Body>
</soap12:Envelope>
具体代码如下NumberService类--处理post请求以及获取服务器返回的归属地信息
public class NumberService {
/**
* 查询号码归属地
*
* @param number
* @return
* @throws Exception
*/
public static String getAddress(String number) throws Exception {
// 把soap肥皂协议-以post方式提交的xml数据获取出来
InputStream is = NumberService.class.getClassLoader()
.getResourceAsStream("data.xml");
byte[] xml = StreamTool.getBytes(is);
String postxml = new String(xml);
//获取将要提交的xml中的 手机号,$mobile为号码占位符 --- 这个xml就相当于 一个jsp表单
String phoneNumber = postxml.replace("$mobile", number);
//以post方式发送数据给服务器
String numberAddress = sendDataByPost(phoneNumber);
return numberAddress;
}
/**
* 以post方式请求服务器
*
* @param result
* 参数就是要查询的手机号码
* @return
* @throws Exception
*/
public static String sendDataByPost(String phoneNumber) throws Exception {
URL url = new URL(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
String data = phoneNumber; // 要传递的数据
//byte[] bytes = data.getBytes();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时连接
conn.setReadTimeout();
//设置请求方式
conn.setRequestMethod("POST");
//设置post请求的参数
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setRequestProperty("Content-Length", data.length()+"");
//允许http协议对外输出信息
conn.setDoOutput(true);
//把数据写给服务器
conn.getOutputStream().write(data.getBytes());
int code = conn.getResponseCode();
if(code==){
//获取从服务器中返回过来的流(由于返回的数据是xml格式,所以需要解析xml)
InputStream is = conn.getInputStream();
String address = ResultXml.getAddress(is);
return address;
}else{
return "访问网络出错";
}
}
}
根据上面服务器给出的xml相应文件--需要解析getMobileCodeInfoResult就可以获取手机对属地信息
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
<getMobileCodeInfoResult>string</getMobileCodeInfoResult>
</getMobileCodeInfoResponse>
</soap12:Body>
</soap12:Envelope>
解析类如下
/**
* 解析服务器返回的xml数据,获取归属地
* @author Administrator
*
*/
public class ResultXml {
public static String getAddress(InputStream is) throws Exception{
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
int type = parser.getEventType(); while(type!=XmlPullParser.END_DOCUMENT){
if(type==XmlPullParser.START_TAG){
if("getMobileCodeInfoResult".equals(parser.getName())){
return parser.nextText();
}
}
type = parser.next();
}
return "没有该号码的信息";
}
}
上面代码中使用了一个工具类StreamTool
public class StreamTool {
/**
*
* @param is 参数InputStream代表从服务器返回过来的流(流中存储了我们所需的数据)
* @return
* @throws Exception
* 这里把服务器流中的数据循环的写入到了内存数组流ByteArrayOutputStream里面
* 作用是内存操作数据快.最后以字节数组返回
*/
public static byte[] getBytes(InputStream is) throws Exception{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[];
int len = ;
while((len = is.read(buffer))!=-){
bos.write(buffer, , len);
}
is.close();
bos.flush();
byte[] result = bos.toByteArray();
System.out.println(new String(result));
return result;
}
}
测试截图
调用webservice获取电话号码归属地信息的更多相关文章
- 调用webservice查询手机号码归属地信息
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务.在这里我们使用soap协议往webservice发送信息,然 ...
- 调用手机在线API获取手机号码归属地信息
手机在线(www.showji.com)始创于2001年,发展至今已拥有国内最准确.号段容量最大的手机号码归属地数据库系统, 目前号段容量将近33万条,每月保持两次以上规模数据更新,合作伙伴包括:百度 ...
- webService获取电话号归属地和获取天气情况步骤,及创建属于自己的webservice
一.什么是Web服务 Web服务是一种可以用来解决跨网络应用集成问题的开发模式,目的是保证不同平台的应用服务可以互操作 二.Web服务的三个核心 Soap: SOAP(Simple Object Ac ...
- 01.阿里云SDK调用,获取ESC主机详细信息
一:通过python SDK获取云主机的详细信息 1.创建Accessky码(不做展示) 2.通过pip安装SDK模块,这个阿里云帮助里面有,也不做详细展示. 3.详细使用方法看代码 我下面展示的返回 ...
- C#调用WebService获取天气信息
概述 本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预 ...
- .NET(C#)调用webService获取客户端IP地址所属区域(非异步)
功能描述: 此接口用于获取客户端访问的IP的地址所属的区域(国家,城市等).通过输入IP地址查询国家.城市.所有者等信息.没有注明国家的为中国输入参数:IP地址(自动替换 " ." ...
- 调用WebService获取数据
以下调用方法,以调用苏州天气接口为例. 一.后台请求服务 方法一.C#后台,通过构建Soap请求接口数据 //获取天气详细信息 public JsonResult GetWeatherDetails( ...
- 第十五章:Android 调用WebService(.net平台)
什么是webservice? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和 ...
- Android 调用webService(.net平台)
什么是webservice? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和 ...
随机推荐
- postman-使用教程
postman postman是一款非常方便的API测试工具,可以帮我们快速的发起HTTP请求,下面记录一下postman的基本使用. postman安装 postman下载地址 下载安装打开之后就是 ...
- 深入理解 linux磁盘顺序写、随机写
一.前言 ● 随机写会导致磁头不停地换道,造成效率的极大降低:顺序写磁头几乎不用换道,或者换道的时间很短 ● 本文来讨论一下两者具体的差别以及相应的内核调用 二.环境准备 组件 版本 OS Ubunt ...
- Python装饰器完全解读
1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入理解并应用装饰器,你会更加感慨——人生苦短,我用Python. 2 初步理解装 ...
- 激活Cisco路由器和交换机的right-to-use
一.确认当前正在使用license版本 show license #路由器2911测试可行 show license summary #交换机C4503测试可行 show version # ...
- Redis的常用命令与Java整合及高级应用篇
一,redis是什么? 首先数据库分为关系型数据库和非关系型数据库,关系型数据库是采用关系模型来组织数据的数据库,简单来说就是二维表格模型,同时保证事务的一致性. 相反非关系型数据库采用key ...
- 使用Python的Django和layim实现即时通讯
看到Django和layim实现websocketde资料很少,自己就琢磨了下,顺便搭建出来了.自己要去找闲心大神授权呀. 先来看图 这是初次搭建的,今天一天就搞定.我自己接入了图灵机器人. Pyt ...
- vue中组件通信
组件的通信 1. 父子组件通信 案例: //父子组件通信思路 // 1 将父组件的数据传给子组件 在子组件上自定义单项数据绑定 // 2 子组件用props 接受自定义的那个:号属性 Vue.co ...
- think in java 泛型
曾几何时,我们对java的泛型充满了好奇,但是感觉用起来有很爽,但又会在spring类型泛型的地方,遇到问题. 我第一次的遇到泛型是在使用别人的BaseDao的时候,这是一个java封装hiberna ...
- 9043Markdown常用用法
1.标题 1.1 方法一:==和--标记 =和-标记语法格式如下: 我是标题一 == 我是标题二 -- 组成: 1标题文字:我是标题一 2回车换行 3标记:== (为一级标题)--(为二级标题) 效果 ...
- unity编辑器扩展_05(删除游戏对象并具有撤回功能)
代码: [MenuItem("Tools/Delete",false,1)] static void Delete() { GameObject[] go ...