iOS随笔我爱编程

WebService之Soap请求

2018-04-12  本文已影响182人  CoderXLL

一、让人一眼懵逼的概念

从上面两组概念可以看出,webService服务组件是为了实现Soap协议的一个工具。<span style="border-bottom:2px dashed yellow;">简单来说,Soap请求就是向服务器传递xml数据,服务器向客户端也返回xml数据。</span>

二、前期准备

首先打开你的接口文档,你会发现一个公司的WebService服务地址。打开它。

三、精妙拼接请求体

将上面获取的默认的请求信息,作为单独的一个方法进行处理。因为客户端所要传的参数都是要放到body节点元素下的,所以我们在这个节点下使用%@来对以后传入的参数预留位置。

+ (NSString *)defaultSoapMessage
{
    NSString *soapBody=@"<soapenv:Envelope 
xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" 
xmlns:tem=\"http://tempuri.org/\">""
<soapenv:Body>%@</soapenv:Body>
</soapenv:Envelope>";
    return soapBody;
}

然后就是拼接body节点下的xml数据。我处理项目的时候,这个xml数据有三种拼接情况。

  1. 接口没有参数
    这种情况下,一般是将方法名单独作为一个节点,拼接放入body节点下。
  2. 以每个参数作为单独节点,参数对应的value值作为节点值。拼接放入body节点下。
  3. 以一个固定的节点名,如input节点。节点值为参数的json字符串。

总之,根据文档上的要求,对应着自己拼接即可。

四、NSURLConnection进行请求

//1.根据地址生成请求实例
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//2.拼接的body长度
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage1 length]];
//3.设置请求头
//3.1请求内容类型(xml类型)
[request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
//3.2请求体长度
[request addValue: msgLength forHTTPHeaderField:@"Content-Length"];
//3.3SOAPAction(一开始获取的)
[request addValue:[NSString stringWithFormat:@"%@%@", defaultSOAPActionStr, methodName] forHTTPHeaderField:@"SOAPAction"];
//4.请求类型(POST类型)
 [request setHTTPMethod:@"POST"];
//5.设置请求体
[request setHTTPBody: [soapMessage1 dataUsingEncoding:NSUTF8StringEncoding]];
//6.开始请求  
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, id data, NSError * _Nullable connectionError) {
          //7.在回调里进行容错逻辑与xml解析
}];

五、结束语

以上就是与后端对接Soap请求的一整套流程。
这是编写的soap请求类
单独为请求开辟一个名为XLLBaseSoapEngine的线程,并在线程添加Runloop为线程保活。
参考文章:https://www.cnblogs.com/cocoajin/p/6518024.html

上一篇 下一篇

猜你喜欢

热点阅读