У меня есть класс веб-сервиса (MyAPIClient), который расширяет AFHTTPClient. Все запросы на веб-сервер отправляются с использованием метода postPath, а данные находятся в формате JSON. MyAPIClient содержит только один метод:AFHTTPClient и gzip
- (id)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self setDefaultHeader:@"Accept" value:@"application/json"];
[self setParameterEncoding:AFJSONParameterEncoding];
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
return self;
}
Теперь я хочу добавить кодировку gzip. Как FAQ говорит:
Просто возьмите HTTPBody из NSMutableURLRequest, сжимать данные и повторно установить его перед созданием операции с использованием запроса.
У меня есть библиотека Godzippa, поэтому я могу сжимать данные. Далее я думаю, что нужно переопределить метод PostPath, что-то вроде этого:
-(void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(AFHTTPRequestOperation *, id))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure
{
NSMutableURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:parameters];
NSData *newData = [[request HTTPBody] dataByGZipCompressingWithError:nil];
[request setHTTPBody:newData];
[self setDefaultHeader:@"Content-Type" value:@"application/gzip"];
AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
[self enqueueHTTPRequestOperation:operation];
}
Я считаю, что это не правильный способ сделать это как AFHTTPClient необходимо преобразовать NSDictionary в JSON и только тогда я могу кодировать в Gzip и установите правильный «Content-Type», верно? Любая помощь будет оценена по достоинству.