访问Web服务器时 使用的协议是,使用SOAP协议访问Web服务

SOAP是简单对象访问协议,它可看成是HTTP与XML的结合,其中XML部分是作为HTTP报文的实体主体部分。

SOAP:简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

下面重点说下:

在iOS中使用SOAP,需要我们自己组装XML格式的字符串,当XML字符串比较长的时候会变得很麻烦。另外,我们在写XML格式的字符串时也要经常使用转义字符“\”。

29764265_1.png

若在mobileCode输入手机号码,userID不输入,点击调用,则结果如下:

29764265_2.png

看看刚才那个网页的内容,注意到SOAP 1.2标签下的内容:

29764265_3.jpg

上面的这段文本就是使用SOAP 1.2的请求报文格式,就是一个HTTP请求报文,注意空行上面的那些内容中的请求行与各首部行的每个字段名,在下面的示例中会用到。这个HTTP请求报文的实体主体部分是XML格式的一段文本,注意Body标签之间的内容。

服务器的响应报文格式如下:

29764265_4.jpg

我们要用到的只有getMobileCodeInfoResult这个标签。

这次的例子是实现通过SOAP服务查询手机号码归属地、运行商等信息。PS:用的Xcode 4.4.1。

1、运行Xcode 4.4.1,新建一个Single View Application,名称为SOAP Test:

29764265_5.png

2、界面设计:打开ViewController.xib,设计界面如下所示:

29764265_6.png

在文本输入框的Attribute Inspector中设置其Keyboard属性为Number Pad。

3、之后向ViewController.h中,为文本输入框创建OutLet映射,名称为:phoneNumber;为“查询”按钮创建Action映射,事件类型为Touch Up Inside,名称为:doQuery。建立映射的方法就是打开Assistant Editor,选中某一控件,按住Ctrl,拖向ViewController.h。

4、在ViewController.h中添加代码:

4.1 在@interface那行最后添加代码

使ViewController遵守这两个协议。前者用来解析XML,后者用于网络连接。

4.2 在@end之前添加代码@property(strong,nonatomic)NSMutableData*webData;@property(strong,nonatomic)NSMutableString*soapResults;@property(strong,nonatomic)NSXMLParser*xmlParser;@property(nonatomic)BOOL elementFound;@property(strong,nonatomic)NSString*matchingElement;@property(strong,nonatomic)NSURLConnection*conn;

5、在ViewController.m中添加代码:

5.1 在@implementation之后添加代码@synthesizewebData;@synthesizesoapResults;@synthesizexmlParser;@synthesizeelementFound;@synthesizematchingElement;@synthesizeconn;

5.2 实现doQuery方法

29764265_7.jpg

29764265_8.jpg

5.3 在@end之前添加代码#pragmamark-#pragmamark URLConnectionDataDelegateMethods// 刚开始接受响应时调用-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{[webData setLength:0];}// 每接收到一部分数据就追加到webData中-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{[webData appendData:data];}// 出现错误时-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error{conn=nil;webData=nil;}// 完成接收数据时调用-(void)connectionDidFinishLoading:(NSURLConnection*)connection{NSString*theXML=[[NSStringalloc]initWithBytes:[webData mutableBytes]length:[webData length]encoding:NSUTF8StringEncoding];// 打印出得到的XMLNSLog(@"%@",theXML);// 使用NSXMLParser解析出我们想要的结果xmlParser=[[NSXMLParseralloc]initWithData:webData];[xmlParser setDelegate:self];[xmlParser setShouldResolveExternalEntities:YES];[xmlParser parse];}

5.4 在@end之前添加代码#pragmamark-#pragmamark XMLParserDelegateMethods// 开始解析一个元素名-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary*)attributeDict{if([elementName isEqualToString:matchingElement]){if(!soapResults){soapResults=[[NSMutableStringalloc]init];}elementFound=YES;}}// 追加找到的元素值,一个元素值可能要分几次追加-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string{if(elementFound){[soapResults appendString:string];}}// 结束解析这个元素名-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName{if([elementName isEqualToString:matchingElement]){UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"手机号码信息"message:[NSStringstringWithFormat:@"%@",soapResults]delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil];[alert show];elementFound=FALSE;// 强制放弃解析[xmlParser abortParsing];}}// 解析整个文件结束后-(void)parserDidEndDocument:(NSXMLParser*)parser{if(soapResults){soapResults=nil;}}// 出错时,例如强制结束解析-(void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError{if(soapResults){soapResults=nil;}}

6、运行

29764265_9.png

29764265_10.png

其中,输入号码时单击查询,打印出的响应XML如下:

29764265_11.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同时画多个饼图_手帐术 | 这个神奇饼图里,藏着时间管理的小秘诀

说起效率管理kk首先想到的就是时间饼了简直就是拖延症的救星啊!!!不仅能帮我们规划日程而且相比于时间轴来说可视化更强今天kk就来介绍一下时间饼的使用方法~时间饼类型时间饼一共分为几种12h、15h、18h、24h等时间越长分的越细12小时12h适合…

Dotnet创建Linux下的Service应用

创建Service应用,是一个服务端开发的必会技能。前言说到服务端应用,最常见的就是API服务。除此之外,还有一类应用,比方一个Socket的服务器。这类型的应用,本身没有Web层,当然也不属于API服务。通常大家会怎…

【转】java io 总结(图)

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/dlpinghailinfeng/blog/91191

TensorFlow的各种应用,你晓得不?

近几年,AI 的重大进展对我们的日常生活产生了积极影响。随着Google发布了《Google AI 原则》( Google AI Principles ),它们为 AI 发展提供了一个框架。由于这一领域的发展非常迅速,一些原则的最佳实践,如 “ 避免制造或加强不公平…

dhcp服务器显示主机名,linux – 当我没有在dhclient.conf中定义一个时,我的DHCP服务器如何知道我的机器的主机名?...

我正试图在我们的网络上解决与DHCP相关的一些时髦的DNS问题(我怀疑我们目前运行的是多个DHCP服务器),并且在试图解决这个问题时,我发现有一些奇怪的新服务器我只是建立.有问题的服务器是运行Ubuntu 9.10服务器的Xen虚拟机.物理Xen服务器也在我们的网络上,当我第一次在Xen中启动…

6月开招|工业互联才是王道,最高可达50k!

就在昨天,工信部发布了《工业互联网十个典型应用场景和五个重点行业实践》,具体介绍10个典型场景及5个重点行业工业互联网的实际应用情况,可以看到国内工业互联网正在蓬勃发展,欣欣向荣,工业4.0的浪潮正在席卷整个行业…

micropython安装ros_ROS2与STM32入门教程-microROS的linux版本

ROS2与STM32入门教程-micro_ros的linux版本说明:介绍如何安装使用micro_ros步骤:安装ros2版本foxy,查看教程加载ros2环境source ~/ros2_foxy/install/setup.bash也可以把这一句加到bashrc文件,新开终端就不用再输入安装micro-xrce…

php引用

php引用允许两个变量指向同一个内容。意思是&#xff0c;当这样做时 <?php $a&$b; ?> 意味着$a与$b指向同一变量&#xff0c;这并不是$a指向了$b或者相反,而是$a和$b指向了同一地方 如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回&#xff0c;则会自…

2018 年最受欢迎的 Python 库,你都用过吗?

全世界只有3.14 % 的人关注了数据与算法之美前段时间&#xff0c;数据科学网站 KDnuggets 评选出了顶级 Python 库 Top15&#xff0c;领域横跨数据科学、数据可视化、深度学习和机器学习。推荐阅读《Python3.0科学计算指南》上图&#xff1a;根据 GitHub star 和贡献评选出的 2…

登录服务器修改数据库吗,如何修改服务器登录数据库 sa

如何修改服务器登录数据库 sa 内容精选换一换为确保华为云关系型数据库服务发挥出最优性能&#xff0c;用户可根据业务需求对用户创建的参数模板中的参数进行调整。您可以修改用户创建的数据库参数模板中的参数值&#xff0c;但不能更改默认数据库参数模板中的参数值。以下是您…

用NSubstitute来mock

Moq在.net中比较出名的mock框架&#xff0c;NSubstitute也是属于这类框架&#xff0c;使用方式也如出一辙&#xff0c;是通过实现子类来达到mock的效果。下面的测试方法都是按照 UnitTest的三板斧Arrange Act Assert来展开的&#xff0c;代码具体如下。using Microsoft.VisualB…

ubuntu安装mysql_Ubuntu18.04下安装MySQL

提示&#xff1a;以下操作均在root用户下进行&#xff0c;如在普通用户&#xff0c;请自行加上sudo&#xff01;# 查看有没有安装MySQL&#xff1a;dpkg -l | grep mysql# 安装MySQL&#xff1a;apt install mysql-server安装完成之后可以使用如下命令来检查是否安装成功&#…

shell 赋值

${parametre-default}与{parameter:-default}的输出等效&#xff0c;只当parameter被声明但值为null时候&#xff0c;二者才有区别。//变量未声明、未赋值[rootinstructor ~]# echo $a[rootinstructor ~]# echo ${a-1}1[rootinstructor ~]# echo ${a:-1}1//变量声明、赋值为nul…

居家好物┃超好用的擦窗神器保护腰椎尾椎久坐不累的美臀坐垫

▲卢sir特别推荐点击上图进入玩酷屋春节即将来临&#xff0c;小木特地挑选了好几款超级好用的居家生活产品。第一款&#xff1a;擦外窗神器&#xff0c; 颠覆你擦窗方式&#xff01;双面长柄 可伸缩 可折叠 可旋转便携擦玻璃神器第二款&#xff1a;天然抗菌除螨毛巾&#xff0c…

ML.NET Cookbook:(12)我想看看模型的系数

通常&#xff0c;一旦一个模型被训练出来&#xff0c;我们也会对“它学到了什么”感兴趣。例如&#xff0c;如果线性模型为我们认为重要的特征赋予零权重&#xff0c;则可能表明建模存在一些问题。线性模型的权重也可用作对“特征重要性”的估计。这是我们可以从训练的模型中提…

【读书笔记】《编写高效的JavaScript程序》

为什么80%的码农都做不了架构师&#xff1f;>>> 看到一篇文章&#xff0c;http://www.csdn.net/article/2012-11-20/2811887-writing-fast-memory-efficient-javascript/2 里面有个网页针对 原型链&#xff0c;模块化&#xff0c;模块化加缓存&#xff0c;进行了比…

Cloudera将被私有化,Hadoop时代或将落幕

北京时间 6 月 1 日晚&#xff0c;据 TechCrunch 报道 [1]&#xff0c;KKR 和 CD&R 将以 53 亿美元收购 Cloudera&#xff0c;Cloudera 将被私有化。截止到本文发稿时&#xff08;11 点 49 分&#xff09;&#xff0c;Cloudera 股票报价 15.94 美元&#xff0c;涨幅 23.95%…

mysql group_concat去重_MySQL group_concat() 函数用法

MySQL group_concat() 函数用法在使用 group by对数据进行分组后&#xff0c;如果需要对 select 的数据项进行字符串拼接&#xff0c;这时就需要用到group_concat()函数。1、基本用法group_concat()完整语法如下&#xff1a;group_concat([DISTINCT] 要连接的字段 [Order BY AS…

secureCRT常用设置

1、光标颜色 默认为黑色&#xff0c;非常不便&#xff0c;设置为白色。 Options–> Session Options –> Appearance –> Cursor –> 勾选use color选择白色 2、设置超时 Session Options –> Send protocol NO-OP every 输入60。 3、设置鼠标右键复制 Global O…

请问:如何写出没有BUG的代码?

全世界只有3.14 % 的人关注了数据与算法之美1947年9月9日&#xff0c;美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作。她的团队跟踪到 Mark II 上的一个错误&#xff0c;操作人员发现是由于一只飞蛾钻到了 Mark II 的继电器…