Android利用WebService查询手机号码归属地

简介: MainActivity如下: package cc.testwebservice;import java.io.ByteArrayOutputStream;import java.

MainActivity如下:

package cc.testwebservice;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.http.HttpStatus;
import org.xmlpull.v1.XmlPullParser;
import android.os.Bundle;
import android.util.Xml;
import android.app.Activity;
/**
 * Demo描述:
 * 利用WebService查询手机号码归属地
 * 
 * 注意事项:
 * 在http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
 * 的SOAP 1.2中明确提示请求的设置:
 * POST /WebServices/MobileCodeWS.asmx HTTP/1.1
 * Host: webservice.webxml.com.cn
 * Content-Type: application/soap+xml; charset=utf-8
 * Content-Length: length
 * 即:
 * 请求方法:POST 采用HTTP协议 路径为/WebServices/MobileCodeWS.asmx
 * 主机名称:webservice.webxml.com.cn
 * 所以请求路径为http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx
 * 亦明确提示在POST请求时需要设置:
 * Content-Type和Content-Length字段及其值
 * 
 * 参考文档:
 * 1 http://www.webxml.com.cn/zh_cn/index.aspx
 * 2 http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx
 * 3 http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
 * 
 * 备注说明:
 * 该服务在少数时候,会访问失败403错误.
 * 多试几次即可
 */
public class MainActivity extends Activity {
    private final String mobileNumber="1500280";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		new Thread(){
			public void run() {
				String city=queryMobileCodeByWebService(mobileNumber);
				System.out.println("city="+city);
			};
		}.start();
		
	}
    private String queryMobileCodeByWebService(String mobileNumber){
    	String city=null;
    	try {
    		InputStream inputStream=this.getAssets().open("soap.xml");
    		byte [] soapData=inputStreamToByteArray(inputStream);
    		String soapContent=new String(soapData, "UTF-8");
    		//替换soap.xml中的占位符$number
    		soapContent = soapContent.replaceAll("\\$number", mobileNumber);
    		byte [] entity=soapContent.getBytes();
    		
    		String webServicePath = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
    		URL webServiceURL=new URL(webServicePath);
    		HttpURLConnection httpURLConnection = (HttpURLConnection) webServiceURL.openConnection();
    		httpURLConnection.setConnectTimeout(8000);
    		httpURLConnection.setRequestMethod("POST");
    		//因为要发送SOAP协议,所以允许对外输出
    		httpURLConnection.setDoOutput(true);
    		//设置该SOAP协议要求的Content-Type字段
    		httpURLConnection.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
    		//设置该SOAP协议要求的Content-Length字段
    		httpURLConnection.setRequestProperty("Content-Length", String.valueOf(entity.length));
    		OutputStream outputStream = httpURLConnection.getOutputStream();
    		//发送数据
    		outputStream.write(entity);
    		if (httpURLConnection.getResponseCode()==HttpStatus.SC_OK) {
				city=parseSOAPResponse(httpURLConnection.getInputStream());
			}
		} catch (Exception e) {
			
		}
    	
		return city;
    }
    
    //解析服务器以XML形式返回的SOAP
    public String parseSOAPResponse(InputStream inputStream) {
		String city = null;
		try {
			XmlPullParser xmlPullParser = Xml.newPullParser();
			xmlPullParser.setInput(inputStream, "UTF-8");
			int eventType = xmlPullParser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
				case XmlPullParser.START_TAG:
					if ("getMobileCodeInfoResult".equals(xmlPullParser.getName())) {
						city = xmlPullParser.nextText();
						return city;
					}
					break;
				}
				eventType = xmlPullParser.next();
			}
		} catch (Exception e) {
			
		}

		return city;
	}
    
   
    public  byte[] inputStreamToByteArray(InputStream inputStream){
    	ByteArrayOutputStream byteArrayOutputStream=null;
    	try {
    		byteArrayOutputStream = new ByteArrayOutputStream();
    		byte[] buffer = new byte[1024];
    		int len = 0;
    		while( (len= inputStream.read(buffer)) != -1 ){
    			byteArrayOutputStream.write(buffer, 0, len);
    		}
    		byteArrayOutputStream.close();
    		inputStream.close();
		} catch (Exception e) {
			
		}
		return byteArrayOutputStream.toByteArray();
	}
	
}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="利用WebService查询手机号码归属地"
        android:layout_centerInParent="true"
     />

</RelativeLayout>


soap.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>$number</mobileCode>
      <userID></userID>
    </getMobileCodeInfo>
  </soap12:Body>
</soap12:Envelope>


 

相关文章
|
4月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
3501 2
|
5月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
181 0
|
5月前
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
本文介绍了如何批量快速查询手机号码归属地并进行分类。首先,通过提供的百度网盘或腾讯云盘链接下载免费查询软件。其次,开启软件,启用复制粘贴功能,直接粘贴号码列表并选择高速查询。软件能在极短时间内(如1.76秒内)完成40多万个号码的查询,结果包括归属地、运营商、邮箱和区号,且数据准确。之后,可直接导出数据至表格,若数据超过100万,可按省份、城市及运营商分类导出。文章还附带了操作动画演示,展示全程流畅的处理大量手机号码归属地查询的过程。
265 0
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
|
5月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
93 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
5月前
|
存储 数据库 Android开发
Android实现手机内存存储功能
Android实现手机内存存储功能
58 2
|
5月前
|
网络协议 安全 Linux
如何使用Android手机通过JuiceSSH远程访问本地Linux服务器
如何使用Android手机通过JuiceSSH远程访问本地Linux服务器
|
5月前
|
传感器 物联网 Android开发
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
167 1
|
5月前
|
Android开发 网络架构
【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
789 1
|
5月前
|
安全 网络协议 Linux
【公网远程手机Android服务器】安卓Termux搭建Web服务器
【公网远程手机Android服务器】安卓Termux搭建Web服务器
136 0
|
5月前
|
数据可视化 Java 数据挖掘
手机号归属地查询实例
手机号归属地查询实例
179 0