iOS调用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>\
//使用已拼接好的字符串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接口的更多相关文章
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- php中创建和调用webservice接口示例
php中创建和调用webservice接口示例 这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...
- 使用soapui调用webservice接口
soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...
- 使用JS调用WebService接口
<script> $(document).ready(function () { var username = "admin"; var password = &quo ...
- java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport
网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...
- js调用Webservice接口案例
第一步:新建Webservice接口 主文件方法 using System;using System.Collections.Generic;using System.Web;using System ...
- SQL调用WebService接口
今天在做一个非常奇葩的东西.中间有个过程要在SQL触发器里面调用webservice接口.呵呵~ ALTER TRIGGER tgr_UpdateMemcached ON dbo.[User] AFT ...
- 动态调用WebService接口的几种方式
一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过 ...
- ThinkPHP使用soapclient调用webservice接口
1,开启 php.ini 这2个服务 12 extension=php_openssl.dllextension=php_soap.dll 以公共天气预报webservice为例,采用thinkPHP ...
随机推荐
- CF1088F Ehab and a weird weight formula【倍增】
首先把点权归到边上,设点权较小的一个点是v,也就是(u,v)的边权是log2(dis(u,v))*a[v]+a[v]+a[u] 然后还有一个性质就是这棵树按点权最小点提起来就是一个堆 暴力是n^2的M ...
- es6入门5--class类的基本用法
在ES6之前,准确来说JavaScript语言并无类的概念,却有模拟类的做法.相比在类似java这类传统面向对象语言中通过类来生成实例,js则通过构造函数模拟类来生成实例. 这是因为在JS设计初期,作 ...
- 查看java 版本
执行 java -version 命令,如下图所示如果没有明确显示位数的,则说明是32位 C:\MyTools\jdk1.7.0\bin>java -version java version & ...
- windows installer cleanup utility - Windows下卸载神器
https://windows-installer-cleanup-utility.soft32.com
- loj6198谢特 后缀数组+并查集+Trie
先把问题放在后缀数组上考虑 已知两个数组a b,求min(a[i],...,a[j])+(b[i]^b[j])的最大值 套路题 初始每个点都是一个小连通块 把a按从大到小的顺序加入,计算当前加入边作为 ...
- scrapy爬取美女图片
使用scrapy爬取整个网站的图片数据.并且使用 CrawlerProcess 启动. 1 # -*- coding: utf-8 -* 2 import scrapy 3 import reques ...
- Even-odd Boxes hackerrank 分类讨论
https://www.hackerrank.com/contests/101hack50/challenges/even-and-odd-boxes/editorial 昨晚做的时候卡了挺久的. 首 ...
- php文件缓存数据
最近在做微信的摇一摇跑马活动,实现原理是用户摇动手机,通过ajax往数据库写入数据(小马跑的步数),然后PC端用过ajax每一秒钟从数据库中调取一次数据(小马跑的步数),然后显示在PC屏幕上,这样就会 ...
- 关于锚点页内链接跳转出现问题(不响应,没有反应)的解决方法(ZT)
我们知道,利用锚点可以实现页面链接跳转,也可以实现同一页面内的跳转功能. 例如:<a href="somepage.htm>某页面链接</a> 可以跳转链接到som ...
- Java thymeleaf模板获取资源文件的内容
我们在某些时候可能需要获取配置文件properties中的配置信息,而不需要用Java传给模板,在模板中就可以直接获取 我们需要在resources/下定义国际化配置文件即可,注意名称必须中messa ...