首先,請同窗們自行了解webservice的基礎知識。
我的理解,webservice約等於使用http+xml技術進行跨平臺的數據交互。
http和xml咱們都很熟悉了,把他們兩個組合到一塊兒就是webservice了,http負責信息傳輸,xml負責信息的組織。這麼理解雖說簡單了一點,但若是你只須要調用webservice服務,而不須要去建立並維護話,這樣理解也就夠了。 html
1.用xml組織信息
好了,那麼咱們就先從xml提及,咱們須要把一些請求的信息發送給webservice服務器,而服務器又須要把響應的消息反饋給咱們。由於xml的跨平臺特性,在webservice裏使用了xml做爲信息的組織形式。也就是說客戶端與服務器之間說話的方式,是互相傳遞xml文件。
2.用http發送信息
那麼發送xml文件的任務就交給http來作了,咱們把http請求中HttpURLConnection的Content-Type設置成text/xml;charset=UTF-8,那麼咱們的http就能夠傳送xml文件了。java
3.發送的xml長啥樣?
很好,那咱們就發送一個xml給服務器就好,而後服務器把要說的話也放到一個xml裏返回給咱們。但是,但是,咱們怎麼知道要對服務器說什麼?服務器能夠提供哪些服務?這些服務又須要提供哪些參數?這些咱們通通不知道啊。
對了,咱們的wsdl登場了,wsdl至關於一個諮詢臺,它能夠告訴你,服務器都提供了哪些服務,哪一個服務要提供哪些參數。咱們怎麼找到wsdl呢?原來webservice服務都會把wsdl發佈到網上,有須要的朋友們就能夠自取啦。
感謝網友們的力量,這是一些開放的webservice,你們能夠進去看一下。
https://my.oschina.net/CraneHe/blog/183471
像這樣,服務器會提供一個wsdl的連接給你,你能夠嘗試在瀏覽器裏打開這個連接(好比http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl),那就能夠看到如下這些信息了:
這裏面的信息好複雜,看不懂啊。。。要學習wsdl又很費時間,因此博主就從網上找了個工具,自動把這個wsdl諮詢臺裏諮詢員的方言翻譯成了普通話~博主用的這個叫作storm的軟件(http://www.cr173.com/soft/12037.html),固然相似的工具備不少(好比這些:http://www.codeceo.com/article/12-great-webservice-test-tool.html)。storm裏咱們點擊新增,輸入了wsdl之後,wsdl的內容就被翻譯過來了:
這個服務就是你輸入一個qq號,它就告訴你這個qq號的在線狀態,因此須要你提供一個qq號做爲參數。上圖中,樹形結構裏展現了須要咱們填寫的參數qqCode。點擊raw view按鈕,就看到完整的xml內容了,下圖中,左邊是發送的請求xml內容,右邊是服務器返回的xml內容。
(原來xml的複雜格式都是套路)
4.開始編碼啦
好的,準備工做完成!如今咱們總結一下,咱們要用http發送一個xml到服務器上去,而後把服務器返回的xml內容拿來用。發送給服務器的xml的內容,就用咱們軟件從wsdl解析出來的樣式。那麼,咱們開始愉快的編碼吧,這裏我用的java語言,你們也能夠借鑑文末的文章裏提到的其餘語言。web
try {
String urlStr = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
OutputStream oStream = con.getOutputStream();
//下面這行代碼是用字符串拼出要發送的xml,xml的內容是從測試軟件裏拷貝出來的
//須要注意的是,有些空格不要弄丟哦,要否則會報500錯誤的。
//參數什麼的,你能夠封裝一下方法,自動生成對應的xml腳本
String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<soap:Envelope "+
"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" "+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"+
"<soap:Body>"+
"<qqCheckOnline xmlns=\"http://WebXml.com.cn/\">"+
"<qqCode>12345678</qqCode>"+ //你的qq號填到裏邊
"</qqCheckOnline> "+
"</soap:Body>"+
"</soap:Envelope>";
oStream.write(soap.getBytes());
oStream.close();
InputStream iStream = con.getInputStream();
Reader reader = new InputStreamReader(iStream);
int tempChar;
String str = new String();
while((tempChar = reader.read()) != -1){
str += (char) tempChar;
}
//下面這行輸出返回的xml到控制檯,相關的解析操做你們本身動手嘍。
//若是想要簡單的話,也能夠用正則表達式取結果出來。
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>returnedxmlstr:"+str);
iStream.close();
oStream.close();
con.disconnect();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ok,朋友們還能夠把上面這段代碼封裝一下,方便各位的使用。
代碼部分借鑑瞭如下兩篇文章,感謝朋友們的支持與幫助。
http://vvsongsunny.iteye.com/blog/2034038
http://blog.sina.com.cn/s/blog_a00f56270102w2e2.html正則表達式