2017-04-14 66 views
0

如何使用示例登录字段在AFNetworking 3.0中执行XML SOAP请求。请帮助我在这如何使用AFNetworking 3.0执行XML SOAP请求。示例登录字段

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
[manager.requestSerializer setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"]; 
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"]; 
NSMutableDictionary *login_DictObject= [[NSMutableDictionary alloc]init]; 

[login_DictObject setObject:loginID.text forKey:@"YUNAME"]; 
[login_DictObject setObject:password.text forKey:@"YPWD"]; 

[manager POST:kLoginUrl_POST parameters:login_DictObject progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"success!"); 
    [MBProgressHUD hideHUDForView:self.view animated:YES]; 
    [self.navigationController setNavigationBarHidden:YES animated:nil]; 
    [self performSegueWithIdentifier:@"sideBarSegue" sender:nil]; 

} 
     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
      NSLog(@"error: %@", error); 
      [MBProgressHUD hideHUDForView:self.view animated:YES]; 

     }]; 
+1

因此不写代码服务,展示你尝试过什么,到目前为止你访问了什么链接!? –

+0

ADMIN 为admin123

+0

我尝试了错误的方式,但我需要知道怎么写。 –

回答

0

我在我的应用程序之一中使用过这样的东西。您可以编辑请求参数按照您的要求 - 下面写方法在一个单独的类我用“HttpService的”

+ (void)apiRequestWithParameterFromSessionManager:(NSMutableDictionary *)params 
            serviceName:(NSString *)serviceName 
            withSuccess:(void (^)(NSURLResponse *response, NSDictionary *responseDic))success 
            withFailure:(void (^)(NSURLResponse *response, NSError *error))failure { 
NSString *paramString = @""; 
for (id key in params) { 
    id value = [params objectForKey:key]; 
    NSLog(@"key->%@, value->%@",key, value); 
    paramString = [NSString stringWithFormat:@"%@<%@>%@</%@>", paramString, key, value, key]; 
} 

NSLog(@"paramDic->%@",params); 
NSString *soapInitialTags = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" 
          "<SOAP-ENV:Body>" 
          "<%@ xmlns=\"%@\">" 
          "<%@Request>" 
          "<WEBSERVICE>%@</WEBSERVICE>", serviceName, HOME_URL, serviceName, serviceName]; 

NSString *soapEndingTags = [NSString stringWithFormat:@"</%@Request>" 
          "</%@>" 
          "</SOAP-ENV:Body>" 
          "</SOAP-ENV:Envelope>", serviceName, serviceName]; 
NSString *soapMessage = [NSString stringWithFormat:@"%@%@%@", soapInitialTags, paramString, soapEndingTags]; 
NSLog(@"soap message->%@", soapMessage); 

NSURL *url = [NSURL URLWithString:BASE_URL]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPMethod:HTTP_TYPE_POST]; 
[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:[NSString stringWithFormat:@"%@%@", HOME_URL, serviceName] forHTTPHeaderField:@"SOAPAction"]; 
[request addValue:@"text/xml" forHTTPHeaderField:@"Accept"]; 
/** 
* Using AFHTTPSessionManager 
*/ 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
    NSLog(@"output :%@", response); 
    if (error) { 
     failure(response, error); 
    } 
    else { 
     NSError *error; 
     NSDictionary *responseXmlDic = [XMLReader dictionaryForXMLData:(NSData *)responseObject error:&error]; 
     NSDictionary *clearXML = [CommonFunctions extractXML:[[responseXmlDic mutableCopy] copy]]; 
     NSDictionary *responseDic = [[[[clearXML objectForKey:@"soap:Envelope"] objectForKey:@"soap:Body"] objectForKey:[NSString stringWithFormat:@"%@Response", serviceName]] objectForKey:[NSString stringWithFormat:@"%@Result", serviceName]]; 

     NSMutableDictionary *finalDic = [[NSMutableDictionary alloc] init]; 
     for (id key in responseDic) { 
      id value = [responseDic objectForKey:key]; 
      if ([value isKindOfClass:[NSString class]]) { 
       [finalDic setObject:(NSString *)value forKey:key]; 
      } 
      else { 
       [finalDic setObject:@"" forKey:key]; 
      } 
     } 
     NSLog(@"response->%@", responseDic); 
     success(response, finalDic); 
    } 
}]; 
[task resume]; 
} 

致电上述方法类似如下 -

NSMutableDictionary *paramDic = [[NSMutableDictionary alloc] init]; 
    [paramDic setObject:loginModel.email.value forKey:@"EMAIL"]; 
    [paramDic setObject:loginModel.password.value forKey:@"PSSWORD"]; 


    [HttpService apiRequestWithParameterFromSessionManager:paramDic serviceName:LOGIN_SERVICE_NAME withSuccess:^(NSURLResponse *response, NSDictionary *responseDic) { 
     NSLog(@"response->%@", responseDic); 
     [APP_DELEGATE hideProgressBarIndicator]; 

    } 
    withFailure:^(NSURLResponse *response, NSError *error) { 

    }]; 
+0

感谢奎师那的快速反应。我会在这方面努力。 –