How can you use AFNetworking or STHTTPRequest to make a request of a SOAP web service?

前端 未结 1 1314
伪装坚强ぢ
伪装坚强ぢ 2020-12-05 08:57

I am able to use an NSMutableURLRequest with an NSURLConnection to connect to a SOAP web service, as follows:

NSString *soapMessage         


        
相关标签:
1条回答
  • 2020-12-05 09:17

    STHTTPRequest

    //create request
    STHTTPRequest *request = [STHTTPRequest requestWithURL:url];
    //set header here
    [request setHeaderWithName:@"Host" value:@"www.w3schools.com"];
    [request setHeaderWithName:@"SOAPAction" value: @"http://www.w3schools.com/webservices/CelsiusToFahrenheit"];
    [request setHeaderWithName:@"Content-Type" value:@"text/xml; charset=utf-8"];
    //set body here
    request.rawPOSTData = soapData;
    
    //completion block
    request.completionBlock = ^(NSDictionary *headers, NSString *body) {
        NSLog(@"headers = %@\nbody = %@", headers, body);
    
        //parse xml string object here as request is successfull
        if (body.length > 0) 
        {
           NSError *error= nil;
           NSDictionary *dict = [XMLReader dictionaryForXMLString:body error:&error];
           if (!error) 
           {
             NSLog(@"XML Dictionary: %@",dict);
             //do necessary requirement here
           }
           else
             NSLog(@"Error while parsing xml data : %@",[error description]);
    
        }
        else
          NSLog(@"No response from request");
    };
    
    //error block
    request.errorBlock = ^(NSError *error) {
        NSLog(@"%@",[error description]);
    };
    
    //start request
    [request startAsynchronous];
    

    AFNetworking

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:theRequest];
    
    operation.responseSerializer = [AFXMLParserResponseSerializer serializer];
    
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    
        //parse NSXMLParser object here if request successfull
        if ([responseObject isKindOfClass:[NSXMLParser class]]) {
            NSXMLParser *parser = (NSXMLParser *)responseObject;
            NSDictionary *dict = [XMLReader dictionaryForNSXMLParser:parser];
            NSLog(@"JSON: %@ : %@", responseObject,dict);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    [[NSOperationQueue mainQueue] addOperation:operation];
    

    Here XMLReader provides NSDictionary of XMLData using NSXMLParser

    I haved added one more method in XMLReader classes :

    +(NSDictionary*)dictionaryForNSXMLParser:(NSXMLParser*)parser error:(NSError **)error
    

    EDIT : Method Description

    + (NSDictionary *)dictionaryForNSXMLParser:(NSXMLParser *)xmlParser error:(NSError **)error
    {
      XMLReader *reader = [[XMLReader alloc] initWithError:error];
      NSDictionary *rootDictionary = [reader objectWithNSXMLParser:xmlParser options:0];
      return rootDictionary;
    }
    

    objectWithNSXMLParser method.

    - (NSDictionary *)objectWithNSXMLParser:(NSXMLParser *)xmlParser options:(XMLReaderOptions)options
    {
      // Clear out any old data
      self.dictionaryStack = [[NSMutableArray alloc] init];
      self.textInProgress = [[NSMutableString alloc] init];
    
      // Initialize the stack with a fresh dictionary
      [self.dictionaryStack addObject:[NSMutableDictionary dictionary]];
    
      [xmlParser setShouldProcessNamespaces:(options & XMLReaderOptionsProcessNamespaces)];
      [xmlParser setShouldReportNamespacePrefixes:(options & XMLReaderOptionsReportNamespacePrefixes)];
      [xmlParser setShouldResolveExternalEntities:(options & XMLReaderOptionsResolveExternalEntities)];
    
      xmlParser.delegate = self;
      BOOL success = [xmlParser parse];
    
      // Return the stack's root dictionary on success
      if (success)
      {
        NSDictionary *resultDict = [self.dictionaryStack objectAtIndex:0];
        return resultDict;
      }
    
      return nil;
    }
    
    0 讨论(0)
提交回复
热议问题