iOS调用WebService接口

首先有几点说在前面

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

转载于:https://www.cnblogs.com/jx66/p/6971561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值