首先有几点说在前面

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>\
//使用已拼接好的字符串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的请求就完成了。

最新文章

  1. Chrome开发者工具不完全指南(四、性能进阶篇)
  2. POJ2195 Going Home[费用流|二分图最大权匹配]
  3. Iterator(迭代器)-对象行为型模式
  4. 三维网格细分算法(Catmull-Clark subdivision &amp; Loop subdivision)附源码
  5. Mac上编译libimobiledevice库
  6. HTML5新特性及详解
  7. Linux中信号量处理
  8. Feature Scaling
  9. 如何在帝国cms后台菜单栏中添加删除链接?
  10. java基础知识回顾之javaIO类---InputStreamReader和OutputStreamWriter转化流
  11. linux制作livecd
  12. O-C相关-08-动态类型与静态类型
  13. 让QMainWindow也表现出QDialog的exec函数的特征
  14. UVA10199- Tourist Guide(割点)
  15. Thread和ExecutorService(一)
  16. C#中利用双缓冲技术解决绘图闪屏问题。
  17. CSS3弹性伸缩布局(上)——box布局
  18. 非阻塞式的原子性操作-CAS应用及原理
  19. 调用MediaScannerConnection 发生内存泄露的解决方法
  20. 用Python开发小学二年级口算自动出题程序

热门文章

  1. 51nod1065(set.upper_bound()/sort)
  2. 2014-10-5 NOIP模拟赛
  3. codevs 1086 栈(Catalan数)
  4. JS实现简单时钟效果
  5. 使用Git版本控制工具管理GitHub
  6. 01分数规划初探?!By cellur925
  7. 跟踪记录ABAP对外部系统的RFC通信
  8. Codeforces 1152E(欧拉路径)
  9. echart title属性
  10. TDH-ssh免密登录