NSURLConnection с большим телом Base64 JSON

У меня возникла странная и раздражающая проблема с моими запросами к нашему веб-сервису.
Я пытаюсь отправить строки в кодировке base64 через JSON (вместе с некоторым другим содержимым) с помощью методов NSURLRequest и NSURLConnection.

Приведенный ниже код работает для небольших изображений в кодировке base64, таких как аватары размером 64x64 пикселей, но он не работает для больших строк b64 по какой-то странной причине и возвращает ошибку «Bad Request , 400».
Я использую метод POST и длина строки составляет около 10 000 символов. Веб-сервис работает для всего, кроме этих больших строк, я пробовал 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
}

Есть что-то, что мне не хватает?


person Ospho    schedule 13.09.2012    source источник
comment
Привет, Оливер! У меня похожая проблема, как вы можете видеть в этом вопросе: stackoverflow.com/questions/14910142/ Вы знаете, как это решить? В таком случае, я был бы признателен, если бы вы могли дать мне несколько советов. Спасибо!   -  person IOS_DEV    schedule 22.02.2013


Ответы (1)


Похоже, что ответ сервера был связан с конфигурацией веб-службы для обработки больших запросов.
Хотя я не принимал непосредственного участия в серверной стороне проекта, обсуждалось, что это была комбинация:
Кэширование сервера
Время ожидания подключения
Потеря пакетов подключения/проблемы с качеством обслуживания.

AKA, это была проблема на стороне сервера, а не проблема конкретного клиента iOS.

person Ospho    schedule 27.02.2013
comment
Спасибо, Оливер! Я прокомментирую это серверному программисту. - person IOS_DEV; 02.03.2013