AFHTTPClient を拡張する Web サービス クラス (MyAPIClient) があります。Web サーバーへのすべてのリクエストは postPath メソッドを使用して送信され、データは JSON 形式です。MyAPIClient にはメソッドが 1 つだけ含まれています。
- (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が言うように:
NSMutableURLRequest から HTTPBody を取得し、データを圧縮し、リクエストを使用して操作を作成する前に再設定するだけです。
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」を設定できるので、これは正しい方法ではないと思います。どんな助けでも大歓迎です。