[置顶] iOS调用WebService(SOAP接口)
2016-08-05 15:39
489 查看
首先有几点说在前面
一般,在请求URL的后面带有WSDL字样的需要调用WebService
URL样式例子:http://ip:port/navigable/webservice/loginSerice?wsdl或者.wsdl
wsdl (Web Services Description Language)网络服务描述语言
调用WebService默认使用POST请求
下面给一个根据参数userId请求数据的例子
前缀名是
命名空间是
这样作为参数的soap字符串就拼接好了。
2.
同样使用上面的例子,则soap字符串如下:
一个完整的调用WebService的请求就完成了。
一般,在请求URL的后面带有WSDL字样的需要调用WebService
URL样式例子:http://ip:port/navigable/webservice/loginSerice?wsdl或者.wsdl
wsdl (Web Services Description Language)网络服务描述语言
调用WebService默认使用POST请求
soap字符串
使用常见的AFNetworking 进行请求,请求分为两个部分,URL和parameter,URL就是后台给你的接口,这个parameter需要填写入一个完整的带有参数的soap字符串。soap字符串格式如下:
1.命名空间在根目录上
<?xml version="1.0" encoding="utf-8"?> <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/" xmlns:前缀名(如:nsl)="webservice命名空间"> //前缀名一般是nsl,webservice命名空间找后台要 <soap:Header> //此处填写头内容 //有请求头就加上,没上就可去悼soap:Header标签 </soap:Header> <soap:Body> <前缀名:方法名> <参数名1>参数值1</参数名1> <参数名2>参数值2</参数名2> ....... </前缀名:方法名> </soap:Body> </soap:Envelope>
下面给一个根据参数userId请求数据的例子
前缀名是
nsl
命名空间是
http://cxfServer.fh.com
NSString * soapBodyStr = [NSString stringWithFormat:@"<nsl:queryCheckList>\ <userId>%@</userId>\ </nsl:queryCheckList>",userId]; NSString *soapStr = [NSString stringWithFormat: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\ <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/\"\ //自己填写的前缀名和命名空间 xmlns:nsl=\"http://cxfServer.fh.com/\">\ <soap:Body>\ //使用已拼接好的字 cbde 符串soapBodyStr再次拼接进来 %@</soap:Body>\ </soap:Envelope>",soapBodyStr];
这样作为参数的soap字符串就拼接好了。
2.
还有一种情况是命名空间在方法名上则soap字符串格式如下:
<?xml version="1.0" encoding="utf-8"?><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/"> <soap:Header> //有头内容就写,没有就不写soap:Header标签 </soap:Header> <soap:Body> <方法名 xmlns="webservice命名空间"> <参数1>参数值1</参数1> <参数2>参数值2</参数2> </方法名> </soap:Body> </soap:Envelope>
同样使用上面的例子,则soap字符串如下:
NSString * soapBodyStr = [NSString stringWithFormat: @"<queryCheckList xmlns="http://cxfServer.fh.com/\">\ <userId>%@</userId>\ </queryCheckList>",userId]; NSString *soapStr = [NSString stringWithFormat: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\ <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/\"\ <soap:Body>\ //使用已拼接好的字符串soapBodyStr再次拼接进来 %@</soap:Body>\ </soap:Envelope>",soapBodyStr];
使用AF进行完整请求
soap字符串已经完整拼接完成,下面进行该请求数据了AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; // 设置请求超时时间 manager.requestSerializer.timeoutInterval = 60; // 返回NSData manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 设置请求头,也可以不设置 [manager.requestSerializer setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:[NSString stringWithFormat:@"%zd", soapStr.length] forHTTPHeaderField:@"Content-Length"]; // 设置HTTPBody [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { return soapStr; }]; [manager POST:url1 parameters:soapStr success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { // 把返回的二进制数据转为字符串 NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; //使用自己写的请求方法resultWithDiction进行解析 NSDictionary * dic = [self resultWithDiction:result]; //通过Block传回数据 success(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { NSLog(@"%@",error); failure(error); } }];
一个完整的调用WebService的请求就完成了。
相关文章推荐
- ios时间戳13位转换
- iOS开发使用的证书和文件有哪些?
- 《Motion Design for iOS》(三十八)
- 【转】详述iOS国际化
- iOS- 单利了解
- iOS xcode 中代码解压缩和黄色group 和蓝色folder 的区别
- 作为iOS开发者不得不follow的52人
- iOS 和mac 端 开源 项目
- ios TouchID的使用
- iOS程序逆向Mac下常用工具——Reveal、HopperDisassemble、IDA
- Xcode iOS9.3 配置包 could not find developer disk image
- iOS开发常用的RGB色值和中文名字
- 一些ios基础题目
- iOS 极光推送 iResCode:6002
- iOS开发_统计xcode代码行数
- [iOS 抽屉DDMenuController] 侧边弹出库 使用
- IOS 关于企业打包ipa
- jenkins+Xcode+蒲公英实现ipa自动打包发布全攻略
- 手把手教你利用Jenkins持续集成iOS项目
- IOS9 定位授权问题