NSURLConnection与大型Base64 JSON主体

时间:2012-09-13 02:35:55

标签: objective-c json web-services post nsurlconnection

我对我的网络服务的请求有一个奇怪而恼人的问题 我试图通过NSURLRequest和NSURLConnection方法通过JSON(以及其他一些内容)发送base64编码的字符串。

下面的代码适用于小型base64编码图像,例如64x64像素头像,但由于某些奇怪的原因,它不能用于较大的b64字符串,因此会返回“Bad Request,400”错误。
我正在使用POST方法,字符串长度大约是10,000个字符。 web服务适用于除了这些大字符串之外的所有内容,我尝试了3种不同的b64解析解决方案,但没有一种工作。
不幸的是,我是前端编码器,并且几乎没有网络服务经验,所以对任何帮助表示赞赏。

    NSData *postData = [JSONRequest dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    [request setURL:[NSURL URLWithString:URLRequest]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];
    [request setTimeoutInterval:9999.0f];
    [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
    [request setHTTPShouldUsePipelining:NO];



    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:delegateData];

    [connection start];
    [connection release];
    [request release];
    NSLog(@"Connection to %@!",URLRequest);

响应在这里被发现:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

     NSLog(@"didRecieveResponse");

     // cast the response to NSHTTPURLResponse so we can look for 404 etc
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
     NSLog(@"Response:%@ StatusCode: %i",[NSHTTPURLResponse localizedStringForStatusCode:[httpResponse statusCode]],[httpResponse statusCode]);
     if ([httpResponse statusCode] >= 400)
         // do error handling here
}

有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

服务器响应似乎是由Webservice配置处理大量请求引起的 虽然我没有直接参与项目的服务器端方面,但讨论的是它是以下的组合:
服务器缓存
连接超时间隔
连接丢包/服务质量问题。

AKA,这是服务器端问题,而不是iOS特定客户端问题。