如何使用ASIFormDataRequest压缩请求?

时间:2012-05-09 08:58:10

标签: iphone ios ipad asihttprequest

我正在尝试使用ASIHttp库从iPad应用程序向Apache服务器发送一些帖子数据。

实际上我需要向服务器发送大量数据,这意味着我需要压缩请求体,所以我写了一些代码来发送数据并压缩请求但是服务器上没有接收到任何参数!

iOS代码是:

        NSURL * URL = [NSURL URLWithString:myURL];  
        ASIFormDataRequest *ASIRequest = [ASIFormDataRequest requestWithURL:URL];
        ASIRequest.shouldCompressRequestBody=YES;
        ASIRequest setPostValue:data forKey:@"data"];
        [ASIRequest startSynchronous];
        NSError *error = [ASIRequest error];
        if (!error) {
            NSString *response = [ASIRequest responseString];
            NSLog(@"response %@" , response);
        }

PS:如果我删除了ASIRequest.shouldCompressRequestBody = YES;一切正常,我可以看到数据,但在使用它时,我在服务器上看不到任何内容

  1. 可以在服务器上看到请求,但没有参数
  2. 现在通过GET方法发送此类数据。
  3. 服务器配置没问题。
  4. 任何解决方案?任何评论或想法可以帮助吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,大多数Web服务器不支持POST上的压缩。这里接受的答案可以很好地解释它:Why can't browser send gzip request?

根据官方文档,此功能仅在Apache服务器上进行了测试。

编辑:

这是一个压缩实际帖子数据的代码片段:

if ([self shouldCompressRequestBody]) {
    NSError *err = nil;
    NSData *compressedBody = [ASIDataCompressor compressData:[self postBody] error:&err];
    if (err) {
        [self failWithError:err];
        return;
    }
    [self setCompressedPostBody:compressedBody];
    [self setPostLength:[[self compressedPostBody] length]];
} 

来源:http://forums.three20.info/discussion/77/tturlrequest-vs-asihttprequest/p1