调用webservice接口大致有三种方式,分别是SOAP请求、Http Get请求和Http Post请求,GET和POST可以尝试访问webserviceAddress/methodname 通过传入NSDictionary@{key:value}形式的params的来获取结果,只是返回的数据是一个xml文档,需要再次解析或者通过截取字符串的方式来获取有用的json字符串,soap方式的话需要自己封装soap请求体,下面给出了soap请求的具体例子:
注:当前控制器需遵守NSXMLParser协议,并实现parser方法,用来解析返回的xml文件,获取最终的json字符串。
-(void)getResponse{
//封装soap请求消息
NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<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/\">\n"
"<soap:Body>\n"
"<MethodName xmlns=NameSpace>\n"
"<param1>%@</param1>\n"
"<param2>%@</param2>\n"
"</MethodName>\n"
"</soap:Body>\n"
"</soap:Envelope>\n"
,param1Value,param2Value];
//请求发送到的路径
NSURL *url = [NSURL URLWithString:@"webservice Address"];
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
//设置请求头
[manager.requestSerializer setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
//manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 设置HTTPBody
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) {
return soapMessage;
}];
[manager POST:url.absoluteString parameters:soapMessage progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"success-----%@",responseObject);
[responseObject setDelegate:self];
//开始解析
[responseObject parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"failure---------Error: %@", error);
}];
}
pragma mark - NSXMLParser代理
-(void)parser:(NSXMLParser )parser foundCharacters:(NSString )string
{
NSLog(@”parser string = %@”,string);
}