2012-03-26 4 views
0

Я использую NSMutableURLRequest для простой загрузки файла с iOS5 на пользовательский сервер. Когда я отправляю запрос, у меня есть распечатка длины bodyContents, которая содержит тело запроса. Для конкретного запроса, над которым я работаю, он скажет, что длина равна 46784. Я не устанавливаю длину контента, так как я обнаружил, что он делает это автоматически, но я все равно вытаскиваю информацию, если мне это нужно позже , Заголовки, принимаемые сервером, говорят, что длина контента равна 46784. Когда я набираю персонаж на теле на конце сервера, он сообщает мне, что длина тела равна 46788, 4 слишком много. Я выполнил еще один запрос, опять же, у запроса было еще 4 символа, чем то, что я отправил.NSMutableURLRequest добавляет дополнительную информацию в тело, делая неправильной длину контента

Сначала я думал, что это должно быть на стороне сервера, просто потому, что это не имеет никакого смысла. Поэтому я отправил запрос из тестовой программы, которая, как я знаю, работает на сервере, и проверила длину тела, отправленного ей на заголовок длины содержимого, и они были идентичны.

Каков наилучший способ справиться с этим? Должен ли я вручную задать длину содержимого 4+[bodyContents length]? Я не думаю, что это было бы то, что я хотел бы сделать, просто потому, что мне не нужно было добавлять лишнее пространство для данных, которые я не знаю, что хочу.

Вот код, который посылает запрос

-(void)send:(id)delegate 
{ 
    bodyContents = [bodyContents stringByAppendingFormat:@"--%@--",boundry]; 
    NSInteger length = [bodyContents length]; 
    NSLog(@"Length is %i",length); 
    [request setHTTPBody:[bodyContents dataUsingEncoding:NSUTF8StringEncoding]]; 
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:delegate]; 
    if(connection) 
    { 
     NSLog(@"Connection good"); 
    } 
    else 
    { 
     NSLog(@"Connection bad"); 
    } 
} 

я установить тип содержимого свойства запроса в методе инициализации класса.

Любые идеи?

ответ

1

При указании кодировки, размер содержимого может измениться ... получить размер после вы установите HTTPBody, а затем посмотреть, что регулирует вещи четырьмя байтами автоматически.

+0

Я просто пробовал это, он дает мне такую ​​же длину как до, так и после кодирования, а длина тела - еще 4 символа дольше, чем это должно быть. – nick

+0

Следующее, что нужно сделать, это «разбить» байты между тем, что вы отправляете, и тем, что было получено, и посмотреть, какая разница. –

+0

Я запустил diff и не нашел различий в запросах, но это заставило меня задуматься, почему бы не запустить diff на рабочий запрос и нерабочий запрос (что-то, что я должен был сделать давно), и он указал на 2 или 3 небольших изменения, которые мне нужно было сделать. Спасибо :) – nick

Смежные вопросы