我們通過發送XML訪問 WebService就可以實現號碼的歸屬地查詢,我們可以使用Proxy 伺服器提供的XML的格式進行設定,然後請求提交給伺服器,伺服器根據請求就會返回給一個XML,XML中就封裝了我們想要擷取的資料。
發送XML
1.通過URL封裝路徑開啟一個HttpURLConnection
2.佈建要求方式,Content-Type和Content-Length
XML檔案的Content-Type為:application/soap+xml; charset=utf-8
3.使用HttpURLConnection擷取輸出資料流輸出資料
WebService
1.WebService是發布在網路上的API,可以通過發送XML調用,WebService返回結果也是XML資料
2.WebService沒有語言限制,只要可以發送XML資料和接收XML資料即可
3.http://www.webxml.com.cn/網站上提供了一些WebService服務,我們可以對其進行調用
4.http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo中提供了電話歸屬地查詢的使用說明
:
範例程式碼:
view plain
public class XmlService {
public String query(String num) throws Exception {
InputStream in = this.getClass().getClassLoader().getResourceAsStream("query.xml");
byte[] data = LoadUtils.load(in);
String xml = new String(data);
//替換
xmlxml = xml.replace("#", num);
byte[] sendData = xml.getBytes("UTF-8");
//發送到代理的地址上
URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
conn.setRequestProperty("Content-Length", String.valueOf(sendData.length));
//將請求的xml發送出去
conn.setDoOutput(true);
conn.getOutputStream().write(sendData);
//擷取從伺服器傳回來的資料
if (conn.getResponseCode() == 200)
return parse(conn.getInputStream());
return null;
}
//解析流拿到getMobileCodeInfoResult中的資料
private String parse(InputStream inputStream) throws Exception {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inputStream, "UTF-8");
//尋找getMobileCodeInfoResult標籤,擷取標籤中的資料
for (int event = parser.getEventType(); event != XmlPullParser.END_DOCUMENT; event = parser.next())
switch (event) {
case XmlPullParser.START_TAG:
if ("getMobileCodeInfoResult".equals(parser.getName()))
return parser.nextText();
}
return null;
}
}
作者“傅榮康專欄”