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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM