From 5d5a859cfcaff298f7e5141e3abe9fee8bea2f7f Mon Sep 17 00:00:00 2001 From: Roberto Capuano Date: Tue, 12 Dec 2017 16:42:03 +0100 Subject: [PATCH] added 'raw' serializer --- .../synconset/cordovahttp/CordovaHttp.java | 6 +- .../AFNetworking/AFURLRequestSerialization.h | 13 +++++ .../AFNetworking/AFURLRequestSerialization.m | 56 +++++++++++++++++++ src/ios/CordovaHttpPlugin.m | 6 +- www/advanced-http.js | 2 +- 5 files changed, 80 insertions(+), 3 deletions(-) diff --git a/src/android/com/synconset/cordovahttp/CordovaHttp.java b/src/android/com/synconset/cordovahttp/CordovaHttp.java index 0dfd3fb..20c0a72 100644 --- a/src/android/com/synconset/cordovahttp/CordovaHttp.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttp.java @@ -144,7 +144,11 @@ abstract class CordovaHttp { if (new String("json").equals(this.getSerializerName())) { request.contentType(request.CONTENT_TYPE_JSON, request.CHARSET_UTF8); request.send(this.getParamsObject().toString()); - } else { + } else if (new String("raw").equals(this.getSerializerName())) { + // request.contentType(request.CONTENT_TYPE_JSON, request.CHARSET_UTF8); + request.send(this.getParamsObject().toString()); + } else + { request.form(this.getParamsMap()); } diff --git a/src/ios/AFNetworking/AFURLRequestSerialization.h b/src/ios/AFNetworking/AFURLRequestSerialization.h index 694696b..8548a3e 100644 --- a/src/ios/AFNetworking/AFURLRequestSerialization.h +++ b/src/ios/AFNetworking/AFURLRequestSerialization.h @@ -375,6 +375,19 @@ forHTTPHeaderField:(NSString *)field; @end + +#pragma mark - + +/** + `AFRAWRequestSerializer` is a subclass of `AFHTTPRequestSerializer` + */ +@interface AFRAWRequestSerializer : AFHTTPRequestSerializer + + ++ (instancetype)serializer; + +@end + #pragma mark - /** diff --git a/src/ios/AFNetworking/AFURLRequestSerialization.m b/src/ios/AFNetworking/AFURLRequestSerialization.m index a47e2e6..036b80f 100644 --- a/src/ios/AFNetworking/AFURLRequestSerialization.m +++ b/src/ios/AFNetworking/AFURLRequestSerialization.m @@ -1195,6 +1195,62 @@ typedef enum { @end + +#pragma mark - + +@implementation AFRAWRequestSerializer + ++ (instancetype)serializer +{ + AFRAWRequestSerializer *serializer = [[self alloc] init]; + return serializer; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { +// if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { +// [mutableRequest setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"]; +// } + + [mutableRequest setHTTPBody: [parameters dataUsingEncoding:NSUTF8StringEncoding]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + return self; +} + +@end + + #pragma mark - @implementation AFJSONRequestSerializer diff --git a/src/ios/CordovaHttpPlugin.m b/src/ios/CordovaHttpPlugin.m index 6f64cd9..8fafed0 100644 --- a/src/ios/CordovaHttpPlugin.m +++ b/src/ios/CordovaHttpPlugin.m @@ -28,7 +28,11 @@ - (void)setRequestSerializer:(NSString*)serializerName forManager:(AFHTTPSessionManager*)manager { if ([serializerName isEqualToString:@"json"]) { manager.requestSerializer = [AFJSONRequestSerializer serializer]; - } else { + } else + if ([serializerName isEqualToString:@"raw"]) { + manager.requestSerializer = [AFRAWRequestSerializer serializer]; + } else + { manager.requestSerializer = [AFHTTPRequestSerializer serializer]; } } diff --git a/www/advanced-http.js b/www/advanced-http.js index 7cb0c6f..cacce92 100644 --- a/www/advanced-http.js +++ b/www/advanced-http.js @@ -33,7 +33,7 @@ */ var pluginId = module.id.slice(0, module.id.indexOf('.')); -var validSerializers = ['urlencoded', 'json']; +var validSerializers = ['urlencoded', 'json', 'raw' ]; var exec = require('cordova/exec'); var angularIntegration = require(pluginId +'.angular-integration');