`
endual
  • 浏览: 3566514 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

底层调用 Web Services

 
阅读更多

底层调用 Web Services

分类: ┣ Android ┫ 120人阅读 评论 (0) 收藏 举报

      以前一直把Web Services说在嘴边,都没亲自去试验下,或者都是通过别人的API去调用,没有从底层去实验,今天病好很多,下午也闲来无事,便把这个一直留在心里的任务给完成了,以满足自己。

      Web Services的原理我就不仔细说了,可以参考一本《Web Services技术、架构和应用》,书虽有点厚,但很经典。

      本文调用http://www.webxml.com.cn/zh_cn/index.aspx提供的Web Services,该网站提供了几种WEB服务。本文以手机号码归属地查询为例,介绍调用Web Services的方法。

       首先在http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo,我们便可看到该方法的参数传递形式。

 

  1. SOAP 1.1  
  2. 以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。  
  3. POST /WebServices/MobileCodeWS.asmx HTTP/1.1  
  4. Host: webservice.webxml.com.cn  
  5. Content-Type: text/xml; charset=utf-8  
  6. Content-Length: length  
  7. SOAPAction: "http://WebXml.com.cn/getMobileCodeInfo"   
  8. <?xml version="1.0"  encoding= "utf-8" ?>  
  9. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd= "http://www.w3.org/2001/XMLSchema"  xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" >  
  10.   <soap:Body>  
  11.     <getMobileCodeInfo xmlns="http://WebXml.com.cn/" >  
  12.       <mobileCode>string </mobileCode>  
  13.       <userID>string </userID>  
  14.     </getMobileCodeInfo>  
  15.   </soap:Body>  
  16. </soap:Envelope>  
  17. HTTP/1.1 200 OK  
  18. Content-Type: text/xml; charset=utf-8  
  19. Content-Length: length  
  20. <?xml version="1.0"  encoding= "utf-8" ?>  
  21. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd= "http://www.w3.org/2001/XMLSchema"  xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" >  
  22.   <soap:Body>  
  23.     <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/" >  
  24.       <getMobileCodeInfoResult>string </getMobileCodeInfoResult>  
  25.     </getMobileCodeInfoResponse>  
  26.   </soap:Body>  
  27. </soap:Envelope>  
  28. SOAP 1.2  
  29. 以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。  
  30. POST /WebServices/MobileCodeWS.asmx HTTP/1.1  
  31. Host: webservice.webxml.com.cn  
  32. Content-Type: application/soap+xml; charset=utf-8  
  33. Content-Length: length  
  34. <?xml version="1.0"  encoding= "utf-8" ?>  
  35. <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" >  
  36.   <soap12:Body>  
  37.     <getMobileCodeInfo xmlns="http://WebXml.com.cn/" >  
  38.       <mobileCode>string </mobileCode>  
  39.       <userID>string </userID>  
  40.     </getMobileCodeInfo>  
  41.   </soap12:Body>  
  42. </soap12:Envelope>  
  43. HTTP/1.1 200 OK  
  44. Content-Type: application/soap+xml; charset=utf-8  
  45. Content-Length: length  
  46. <?xml version="1.0"  encoding= "utf-8" ?>  
  47. <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" >  
  48.   <soap12:Body>  
  49.     <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/" >  
  50.       <getMobileCodeInfoResult>string </getMobileCodeInfoResult>  
  51.     </getMobileCodeInfoResponse>  
  52.   </soap12:Body>  
  53. </soap12:Envelope>  
 

 

      本文以socket为例子,通过底层方式调用Web Services,把上述的协议描述输成代码,如下:

  1. String strHeader =  "POST /WebServices/MobileCodeWS.asmx HTTP/1.1/r/n"   
  2.         + "Host: webservice.webxml.com.cn/r/n"   
  3.         + "Content-Type: text/xml; charset=utf-8/r/n"   
  4.         + "Content-Length: $Length/r/n"   
  5.         + "SOAPAction: /" http: //WebXml.com.cn/getMobileCodeInfo/"/r/n/r/n";   
  6. String strBody = "<?xml version=/" 1.0/ " encoding=/" utf-8/ "?>/r/n"   
  7.         + "<soap:Envelope xmlns:xsi=/" http: //www.w3.org/2001/XMLSchema-instance/" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">/r/n"   
  8.         + "<soap:Body>/r/n"   
  9.         + "<getMobileCodeInfo xmlns=/" http: //WebXml.com.cn//">/r/n"   
  10.         + "<mobileCode>$MobileNo</mobileCode>/r/n"   
  11.         + "<userID>$UserID</userID>/r/n"  +  "</getMobileCodeInfo>/r/n"   
  12.         + "</soap:Body>/r/n"  +  "</soap:Envelope>/r/n" ;  
 

 

      在这里要注意,代码的形式,协议Header和协议Body要区分清楚,否则会出现调用HTTP400或者HTTP500错误。

      使用Socket 完整代码如下:

 

  1. import java.io.BufferedInputStream;  
  2. import java.io.InputStream;  
  3. import java.io.OutputStream;  
  4. import java.net.InetAddress;  
  5. import java.net.Socket;  
  6. public   class  JavaTest {  
  7.     public   static   void  main(String[] argv) {  
  8.         String strHeader = "POST /WebServices/MobileCodeWS.asmx HTTP/1.1/r/n"   
  9.                 + "Host: webservice.webxml.com.cn/r/n"   
  10.                 + "Content-Type: text/xml; charset=utf-8/r/n"   
  11.                 + "Content-Length: $Length/r/n"   
  12.                 + "SOAPAction: /" http: //WebXml.com.cn/getMobileCodeInfo/"/r/n/r/n";   
  13.         String strBody = "<?xml version=/" 1.0/ " encoding=/" utf-8/ "?>/r/n"   
  14.                 + "<soap:Envelope xmlns:xsi=/" http: //www.w3.org/2001/XMLSchema-instance/" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">/r/n"   
  15.                 + "<soap:Body>/r/n"   
  16.                 + "<getMobileCodeInfo xmlns=/" http: //WebXml.com.cn//">/r/n"   
  17.                 + "<mobileCode>$MobileNo</mobileCode>/r/n"   
  18.                 + "<userID>$UserID</userID>/r/n"  +  "</getMobileCodeInfo>/r/n"   
  19.                 + "</soap:Body>/r/n"  +  "</soap:Envelope>/r/n" ;  
  20.           
  21.         String path = "webservice.webxml.com.cn" ; //   
  22.         try  {  
  23.             InetAddress addr = InetAddress.getByName(path);  
  24.             Socket socket = new  Socket(addr, 80);  
  25.             OutputStream os = socket.getOutputStream();  
  26.             InputStream is  = socket.getInputStream();  
  27.             strBody = strBody.replaceAll("//$MobileNo" "15013055281" );  
  28.             strBody = strBody.replaceAll("//$UserID" "" );  
  29.             byte [] bodyBytes = strBody.getBytes();  
  30.             strHeader = strHeader.replaceAll("//$Length" ""  + bodyBytes.length);  
  31.             String httpSend = strHeader + strBody;  
  32.             System.out .println(httpSend);  
  33.             os.write(httpSend.getBytes());  
  34.             os.flush();  
  35.               
  36.             byte [] recvBytes =  new   byte [4096];  
  37.             int  length = 0;  
  38.             BufferedInputStream bis = new  BufferedInputStream( is );  
  39.               
  40.             while ((length = bis.read(recvBytes) ) != -1){  
  41.                  String recvStr = new  String(recvBytes,  "UTF-8" );  
  42.                  System.out .println(recvStr);  
  43.             }  
  44.         } catch  (Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.     }  
  48. }  
 

 

      使用HttpURLConnection 关键代码代码如下(原理都一样,只不过少写了点东西而已):

 

  1. String path =  "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx" ;  
  2. try  {  
  3.       
  4.     strBody = strBody.replaceAll("//$MobileNo" "15013055288" );  
  5.     strBody = strBody.replaceAll("//$UserID" "" );  
  6.     byte [] bodyBytes = strBody.getBytes();  
  7.     strHeader = strHeader  
  8.             .replaceAll("//$Length" ""  + bodyBytes.length);  
  9.     String httpSend = strBody;  
  10.     System.out .println(httpSend);  
  11.     URL url = new  URL(path);  
  12.     HttpURLConnection conn = (HttpURLConnection)url.openConnection();    
  13.         conn.setRequestMethod("POST" );    
  14.         conn.setDoOutput(true );    
  15.         conn.setConnectTimeout(5 * 1000);    
  16.            
  17.         conn.setRequestProperty("Content-Type" , "application/soap+xml; charset=utf-8" );    
  18.         conn.setRequestProperty("Content-Length" , String.valueOf(bodyBytes.length));    
  19.         OutputStream os = conn.getOutputStream();  
  20.         os.write(bodyBytes);    
  21.         os.flush();  
  22.           
  23.         InputStream is  = conn.getInputStream();  
  24.          
  25.          
  26.             byte [] recvBytes =  new   byte [4096];  
  27.     int  length = 0;  
  28.     BufferedInputStream bis = new  BufferedInputStream( is );  
  29.       
  30.     while ((length = bis.read(recvBytes) ) != -1){  
  31.          String recvStr = new  String(recvBytes,  "UTF-8" );  
  32.          System.out .println(recvStr);  
  33.     }  
  34. catch  (Exception e) {  
  35.     e.printStackTrace();  
  36. }  
 

 

      得到调用结果如下:

 

  1. HTTP/1.1 200 OK  
  2. Date: Thu, 10 Feb 2011 14:35:02 GMT  
  3. Server: Microsoft-IIS/6.0  
  4. X-Powered-By: ASP.NET  
  5. X-AspNet-Version: 2.0.50727  
  6. Cache-Control: private , max-age=0  
  7. Content-Type: text/xml; charset=utf-8  
  8. Content-Length: 434  
  9. <?xml version="1.0"  encoding= "utf-8" ?>  
  10. <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" >  
  11.     <soap:Body>  
  12.         <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/" >  
  13.             <getMobileCodeInfoResult>15013055288:广东 广州 广东移动全球通卡               </getMobileCodeInfoResult>  
  14.         </getMobileCodeInfoResponse>  
  15.     </soap:Body>  
  16. </soap:Envelope>  
 

 

      以上便是从底层调用Web Services的方法。

 

 

      版权所有,转载请注明出处

分享到:
评论

相关推荐

    白色大气风格的旅游酒店企业网站模板.zip

    白色大气风格的旅游酒店企业网站模板.zip

    python实现用户注册

    python实现用户注册

    【图像压缩】基于matlab GUI Haar小波变换图像压缩(含PSNR)【含Matlab源码 9979期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    (177354822)java小鸟游戏.zip

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    VB+access学生管理系统(论文+系统)(2024am).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    数学计算中的平方表与圆周率π的应用

    内容概要:文档名为《平方表,派表集合.docx》,主要内容是1至1000的平方值以及1至1000与π的乘积结果。每个数字从1开始,逐步增加至1000,对应地计算了平方值和乘以π后的值。所有计算均通过Python脚本完成,并在文档中列出了详细的计算结果。 适合人群:需要进行数学计算或程序验证的学生、教师和研究人员。 使用场景及目标:用于快速查找特定数字的平方值或其与π的乘积,适用于教学、科研及程序测试等场景。 阅读建议:可以直接查阅所需的具体数值,无需从头到尾逐行阅读。建议在使用时配合相应的计算工具,以验证和拓展数据的应用范围。

    VB+SQL光盘信息管理系统(源代码+系统+答辩PPT)(20244m).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    白色大气风格的健身私人教练模板下载.zip

    白色大气风格的健身私人教练模板下载.zip

    白色简洁风的商务网站模板下载.zip

    白色简洁风的商务网站模板下载.zip

    白色大气风格的前端设计案例展示模板.zip

    白色大气风格的前端设计案例展示模板.zip

    圣诞树项目中的硬件和MATLAB实现指南

    内容概要:本文介绍了两个有趣的圣诞树项目方向:一是使用Arduino或Raspberry Pi开发可编程的圣诞树灯光控制系统;二是基于MATLAB开发一个圣诞树模拟器。前者通过硬件连接、编写Arduino/Raspberry Pi程序、MATLAB控制程序来实现LED灯带的闪烁;后者则通过创建圣诞树图形、添加动画效果、用户交互功能来实现虚拟的圣诞树效果。 适合人群:具备基本电子工程和编程基础的爱好者和学生。 使用场景及目标:①通过硬件和MATLAB的结合,实现实际的圣诞树灯光控制系统;②通过MATLAB模拟器,实现一个有趣的圣诞树动画展示。 阅读建议:读者可以根据自己的兴趣选择合适的项目方向,并按照步骤进行动手实践,加深对硬件编程和MATLAB编程的理解。

    白色扁平风格的温室大棚公司企业网站源码下载.zip

    白色扁平风格的温室大棚公司企业网站源码下载.zip

    Navicat.zip

    Navicat.zip

    Scikit-learn库中主成分分析(PCA)技术的Python实现教程

    内容概要:本文详细介绍了主成分分析(PCA)技术的原理及其在Scikit-learn库中的Python实现。首先讲解了PCA的基本概念和作用,接着通过具体示例展示了如何使用Scikit-learn进行PCA降维。内容涵盖了数据准备、模型训练、数据降维、逆转换数据等步骤,并通过可视化和实际应用案例展示了PCA的效果。最后讨论了PCA的局限性和参数调整方法。 适合人群:数据科学家、机器学习工程师、数据分析从业者及科研人员。 使用场景及目标:适用于高维数据处理,特别是在需要降维以简化数据结构、提高模型性能的场景中。具体目标包括减少计算复杂度、提高数据可视化效果和改进模型训练速度。 其他说明:本文不仅提供了详细的代码示例,还讨论了PCA在手写数字识别和机器学习模型中的应用。通过比较原始数据和降维后数据的模型性能,读者可以更好地理解PCA的影响。

    (175846434)目标检测-将VOC格式的数据集一键转化为COCO和YOLO格式

    VOC格式的数据集转COCO格式数据集 VOC格式的数据集转YOLO格式数据集。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    数字信号处理课程设计.doc

    数字信号处理课程设计.doc

    白色扁平化风格的灯饰灯具销售企业网站模板.zip

    白色扁平化风格的灯饰灯具销售企业网站模板.zip

    华豫佰佳组合促销视图.sql

    华豫佰佳组合促销视图.sql

    白色大气风格的商务团队公司模板下载.zip

    白色大气风格的商务团队公司模板下载.zip

    白色大气风格的VPS销售网站模板.zip

    白色大气风格的VPS销售网站模板.zip

Global site tag (gtag.js) - Google Analytics