From 937010bd4ecda455758ebca64a2b270ee44a3d4e Mon Sep 17 00:00:00 2001 From: Pavel Chuchuva Date: Tue, 14 Jan 2020 16:09:47 +1100 Subject: [PATCH] Add support for sending 'raw' requests on iOS too --- plugin.xml | 2 ++ src/ios/BinaryRequestSerializer.h | 8 +++++ src/ios/BinaryRequestSerializer.m | 49 +++++++++++++++++++++++++++++++ src/ios/CordovaHttpPlugin.m | 3 ++ 4 files changed, 62 insertions(+) create mode 100644 src/ios/BinaryRequestSerializer.h create mode 100644 src/ios/BinaryRequestSerializer.m diff --git a/plugin.xml b/plugin.xml index 78d43a9..1bf0f73 100644 --- a/plugin.xml +++ b/plugin.xml @@ -31,6 +31,7 @@ + @@ -43,6 +44,7 @@ + diff --git a/src/ios/BinaryRequestSerializer.h b/src/ios/BinaryRequestSerializer.h new file mode 100644 index 0000000..b9930a8 --- /dev/null +++ b/src/ios/BinaryRequestSerializer.h @@ -0,0 +1,8 @@ +#import +#import "AFURLRequestSerialization.h" + +@interface BinaryRequestSerializer : AFHTTPRequestSerializer + ++ (instancetype)serializer; + +@end diff --git a/src/ios/BinaryRequestSerializer.m b/src/ios/BinaryRequestSerializer.m new file mode 100644 index 0000000..16da68f --- /dev/null +++ b/src/ios/BinaryRequestSerializer.m @@ -0,0 +1,49 @@ +#import "BinaryRequestSerializer.h" + +@implementation BinaryRequestSerializer + ++ (instancetype)serializer +{ + BinaryRequestSerializer *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) { + [mutableRequest setHTTPBody: parameters]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + return self; +} + +@end diff --git a/src/ios/CordovaHttpPlugin.m b/src/ios/CordovaHttpPlugin.m index f77f0d9..df31126 100644 --- a/src/ios/CordovaHttpPlugin.m +++ b/src/ios/CordovaHttpPlugin.m @@ -1,5 +1,6 @@ #import "CordovaHttpPlugin.h" #import "CDVFile.h" +#import "BinaryRequestSerializer.h" #import "BinaryResponseSerializer.h" #import "TextResponseSerializer.h" #import "TextRequestSerializer.h" @@ -31,6 +32,8 @@ manager.requestSerializer = [AFJSONRequestSerializer serializer]; } else if ([serializerName isEqualToString:@"utf8"]) { manager.requestSerializer = [TextRequestSerializer serializer]; + } else if ([serializerName isEqualToString:@"raw"]) { + manager.requestSerializer = [BinaryRequestSerializer serializer]; } else { manager.requestSerializer = [AFHTTPRequestSerializer serializer]; }