2013-08-05 2 views
1

AFHTTPClient를 확장하는 웹 서비스 클래스 (MyAPIClient)가 있습니다. 웹 서버에 대한 모든 요청은 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 말한다 같이

간단히하는 NSMutableURLRequest에서 HTTPBody 승차 데이터를 압축하고, 상기 요청을 이용하여 작업을 만들기 전에 다시 설정.

데이터를 압축 할 수 있도록 Godzippa 라이브러리가 있습니다.

-(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이 JSON에있는 NSDictionary 변환 만 그때는 GZIP으로 인코딩 할 수 있으며, 필요로 할 수있는 올바른 방법이 아니다 생각 : 다음 나는이 같은 postPath 방법, 뭔가를 오버라이드 (override) 할 필요가 있다고 생각 오른쪽 "Content-Type"을 설정하십시오. 어떤 도움을 주시면 감사하겠습니다. 누군가가 같은 문제가있는 경우

답변

1

, 여기 내 솔루션 (Godzippa 나를 위해 작동하지 않았다, 그래서 데이터를 인코딩하기 위해 다른 라이브러리를 사용)입니다 :

- (id)initWithBaseURL:(NSURL *)url 
{ 
    self = [super initWithBaseURL:url]; 
    if (!self) { 
     return nil; 
    } 
    [self setDefaultHeader:@"Content-Type" value:@"application/json"]; 
    [self setDefaultHeader:@"Content-Encoding" value:@"gzip"]; 
    [self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

    return self; 
} 

-(void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(AFHTTPRequestOperation *, id))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure 
{ 
    NSData *newData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:NULL]; 
    newData = [newData gzipDeflate]; 

    NSMutableURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:nil];  
    [request setHTTPBody:newData]; 

    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; 
    [self enqueueHTTPRequestOperation:operation]; 
}