Я использую 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");
}
}
я установить тип содержимого свойства запроса в методе инициализации класса.
Любые идеи?
Я просто пробовал это, он дает мне такую же длину как до, так и после кодирования, а длина тела - еще 4 символа дольше, чем это должно быть. – nick
Следующее, что нужно сделать, это «разбить» байты между тем, что вы отправляете, и тем, что было получено, и посмотреть, какая разница. –
Я запустил diff и не нашел различий в запросах, но это заставило меня задуматься, почему бы не запустить diff на рабочий запрос и нерабочий запрос (что-то, что я должен был сделать давно), и он указал на 2 или 3 небольших изменения, которые мне нужно было сделать. Спасибо :) – nick