2017-01-18 18 views
0

AFHTTPSessionManagerを使用して生のXML投稿をSOAPインターフェイスに送信するにはどうすればよいですか?AFHTTPSessionManagerを使用したRaw 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所与の(SOAP)URLに次のコードはhttps://github.com/wymsee/cordova-HTTP/blob/master/src/ios/CordovaHttpPlugin.m#L69からフォークです。未処理のボディで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]; 
関連する問題