2017-01-18 25 views
0

如何使用AFHTTPSessionManager将原始XML文章发送到SOAP接口?以下代码是一个叉从https://github.com/wymsee/cordova-HTTP/blob/master/src/ios/CordovaHttpPlugin.m#L69使用AFHTTPSessionManager的原始XML文章

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.securityPolicy = securityPolicy; 
NSString *url = [command.arguments objectAtIndex:0]; 
NSDictionary *parameters = [command.arguments objectAtIndex:1]; 
NSDictionary *headers = [command.arguments objectAtIndex:2]; 
[self setRequestHeaders: headers forManager: manager]; 

CordovaHttpPlugin* __weak weakSelf = self; 
manager.responseSerializer = [TextResponseSerializer serializer]; 
[manager POST:url parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
    [self setResults: dictionary withTask: task]; 
    [dictionary setObject:responseObject forKey:@"data"]; 
    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; 
    [weakSelf.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
} failure:^(NSURLSessionTask *task, NSError *error) { 
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
    [self setResults: dictionary withTask: task]; 
    NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding]; 
    [dictionary setObject:errResponse forKey:@"error"]; 
    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; 
    [weakSelf.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
}]; 

此讯息multipart/form-data到给定的(肥皂)的URL。是否有可能改变请求,以便它会发送text/xml一个原始的身体?

谢谢!

回答

0

我想出了下面的解决我的问题:

的NSString * URL = [command.arguments objectAtIndex:0]; NSData * body = [[command.arguments objectAtIndex:2] dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary * headers = [command.arguments objectAtIndex:3];

CordovaHttpPlugin* __weak weakSelf = self; 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

NSMutableURLRequest *req = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:url parameters:nil error:nil]; 
[req setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; 
[req setValue:@"text/xml" forHTTPHeaderField:@"Accept"]; 
[req setHTTPBody:body]; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

// Append headers 
for (NSString* key in headers) { 
    NSString *value = [headers objectForKey:key]; 
    [req setValue:value forHTTPHeaderField:key]; 
} 

[[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 

    NSDictionary *responseHeaders = [(NSHTTPURLResponse *)response allHeaderFields]; 
    long status = (long) [(NSHTTPURLResponse *) response statusCode]; 
    NSLog(@"Status: %ld", status); 

    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
    [dictionary setObject:[NSNumber numberWithInteger:status] forKey:@"status"]; 
    [dictionary setObject:responseHeaders forKey:@"headers"]; 

    if (!error) { 
     NSString *responseString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
     NSLog(@"POST SUCCESS: %@", responseString); 
     //[self setResults: dictionary withTask: task]; 

     [dictionary setObject:responseString forKey:@"data"]; 

     CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; 
     [weakSelf.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
    } else { 
     //[self setResults: dictionary withTask: task]; 
     NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding]; 

     [dictionary setObject:errResponse forKey:@"error"]; 

     CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; 
     [weakSelf.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
    } 
}] resume];