ios下表单post使用gzip模式

使用afnetworking,服务器参考的这里

ios端,使用自己的序列化类

manager.requestSerializer = [MyHttpRequestSerializer new];
[manager.requestSerializer setValue:
@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
[manager.requestSerializer setValue:
@"gzip" forHTTPHeaderField:@"Content-Encoding"];

h文件

#import <Foundation/Foundation.h>
#import "AFURLRequestSerialization.h"

@interface MyHttpRequestSerializer : AFHTTPRequestSerializer

@end

关键代码,参考AFJSONRequestSerializer

@implementation MyHttpRequestSerializer

- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                                        withParameters:(nullable id)parameters
                                                 error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW{

    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/json" forHTTPHeaderField:@"Content-Type"];
        }
        
        NSData* data = [NSJSONSerialization dataWithJSONObject:parameters options:(NSJSONWritingOptions)0 error:nil];
        NSData* zippeddata = [LFCGzipUtillity gzipData:data];
        [mutableRequest setHTTPBody:zippeddata];
    }
    
    return mutableRequest;
}

@end

android相关资料在这里

rails5的相关资料在这里

原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/9019962.html