原始 XML Post 使用 AFHTTPSessionManager
Raw XML Post using AFHTTPSessionManager
如何使用 AFHTTPSessionManager
将原始 XML 帖子发送到 SOAP 界面?以下代码是 https://github.com/wymsee/cordova-HTTP/blob/master/src/ios/CordovaHttpPlugin.m#L69:
的分支
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
原始正文?
谢谢!
针对我的问题,我提出了以下解决方案:
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];
如何使用 AFHTTPSessionManager
将原始 XML 帖子发送到 SOAP 界面?以下代码是 https://github.com/wymsee/cordova-HTTP/blob/master/src/ios/CordovaHttpPlugin.m#L69:
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
原始正文?
谢谢!
针对我的问题,我提出了以下解决方案:
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];