首先,请同窗们自行了解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正则表达式