SOAP请求使用NSURLSession Objective C或SWIFT

我如何使用NSURLSession执行SOAP请求? 请查找SOAP请求格式。

  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pm="http://sampleurl.com/webservices/pm"> <soapenv:Header/> <soapenv:Body> <pm:start> <username>awdmmappadmin1</username> <password>password</password> <completedDate>2016-04-25T13:37:34.699Z</completedDate> <gameMinutes>2</gameMinutes> <gameMoves>14</gameMoves> <gameSeconds>33</gameSeconds> <gameTimeSec>153</gameTimeSec> <guestId>2016</guestId> </pm:start> 

我使用Objective C做了下面NSURLSession的实现。它工作正常:

 -(void)startSoapRequest{ NSString *soapMessage = @"<soapenv:Envelopexmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:pm=\"http://appiancorp.com/webservices/pm\">\n<soapenv:Header/>\n<soapenv:Body>\n<pm:start>\n<username>awdmmappadmin1</username>\n<password>password</password>\n<completedDate>2016-04-25T13:37:34.699Z</completedDate>\n<gameMinutes>2</gameMinutes>\n<gameMoves>14</gameMoves>\n<gameSeconds>33</gameSeconds>\n<gameTimeSec>153</gameTimeSec>\n<guestId>2016</guestId>\n</pm:start>\n</soapenv:Body>\n</soapenv:Envelope>"; NSURL *url = [NSURL URLWithString:@"http://sampleurl.com/suite/webservice/processmodel/sample"]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]]; [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; NSURLSession *soapSession = [NSURLSession sessionWithConfiguration: [NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; NSURLSessionDataTask *dataTask = [soapSession dataTaskWithURL: url]; self.responseData = [[NSMutableData alloc]init]; [dataTask resume]; } 

NSURLSessionTaskDelegate:

  - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { //handle data here [self.responseData appendData:data]; } - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { //Called when the data transfer is complete //Client side errors are indicated with the error parameter if (error) { NSLog(@"%@ failed: %@", task.originalRequest.URL, error); }else{ NSLog(@"DONE. Received Bytes: %lu", (unsigned long)[self.responseData length]); NSString *theXML = [[NSString alloc] initWithBytes: [self.responseData bytes] length:[self.responseData length] encoding:NSUTF8StringEncoding]; NSLog(@"%@",theXML); } }