首先有几点说在前面

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的请求就完成了。

iOS调用WebService接口的更多相关文章

  1. Java调用webservice接口方法

                             java调用webservice接口   webservice的 发布一般都是使用WSDL(web service descriptive langu ...

  2. php中创建和调用webservice接口示例

    php中创建和调用webservice接口示例   这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...

  3. 使用soapui调用webservice接口

    soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...

  4. 使用JS调用WebService接口

    <script> $(document).ready(function () { var username = "admin"; var password = &quo ...

  5. java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport

    网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...

  6. js调用Webservice接口案例

    第一步:新建Webservice接口 主文件方法 using System;using System.Collections.Generic;using System.Web;using System ...

  7. SQL调用WebService接口

    今天在做一个非常奇葩的东西.中间有个过程要在SQL触发器里面调用webservice接口.呵呵~ ALTER TRIGGER tgr_UpdateMemcached ON dbo.[User] AFT ...

  8. 动态调用WebService接口的几种方式

    一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过 ...

  9. ThinkPHP使用soapclient调用webservice接口

    1,开启 php.ini 这2个服务 12 extension=php_openssl.dllextension=php_soap.dll 以公共天气预报webservice为例,采用thinkPHP ...

随机推荐

  1. python 之 time模块、datetime模块(打印进度条)

    6.9 time 模块 方法 含义 备注 time.time() 时间戳 1561013092.997079 time.strftime('%Y-%m-%d %H:%M:%S %p') 结构化时间st ...

  2. React `controlled` 及 `uncontrolled` 组件

    通过 props 来设置其 value 值的组件便是一种 controlled 组件.典型的 form 表单中,像 输入框 <input> 下拉框 <select> 多选框 & ...

  3. jsonpath 求和

    { "price": [ 1.0, 2.0 ] } $..price.sum() 以下表达式

  4. echart 初级尝试

    var option = { title: { text: 'ECharts 入门示例'//标题 }, legend: { data:['销量']//图例 }, xAxis: { data: [&qu ...

  5. 2017浙江工业大学-校赛决赛 BugZhu抽抽抽!!

    Description 当前正火的一款手游阴阳师又出新式神了,BugZhu十分想要获得新出的式神,所以他决定花光所有的积蓄来抽抽抽!BugZhu经过长时间的研究后发现通过画三角外接圆能够提高获得该式神 ...

  6. 从一个LocalDateTime引发的疑问

    一 公司有同事部署出错,然后查日志,找时间,从k8s得到的时间是  2017-06-16T09:38:48.580 +0000,然后他就纳闷了,因为他根本不会在9点部署好吧,而且9点大多数程序员都没开 ...

  7. 再谈WPF

    前几天初步看了一下WPF,按照网上说的一些方法,实现了WPF所谓的效果.但,今天我按照自己的思路设计了一个登陆界面,然后进行登陆验证,对WPF算是有进一步的理解,记录下来,以备后期查看. 首先,在WP ...

  8. sql 容易被忽视的点

    1 dual select查询语句只有select就可以,但为了规范,凑结构,可以加个dual 例:select now() from dual; 这个概念是Oracle中的.在mysql中可写可不写 ...

  9. 对flex-grow和flex-shrink的深入理解

    flex弹性布局,如果子元素宽度之和大于或者小于父元素宽度,空间就会存在剩余和不够,flex默认不换行,除非设置flex-wrap,那么这种情况下,有两个重要的属性,flex-grow和flex-sh ...

  10. Linux下软件安装的四种方式

    一.源码安装 步骤: 下载,解压源码(常见的源码打包格式:.tar.gz/.tar.bz2); 可以直接下载源码再上传至linux服务器,或者在联网状态下,直接通过wget等命令获取源码安装包;源码解 ...