NSMutableURLRequest добавляет дополнительную информацию в тело, делая Content-Length неправильным - PullRequest
0 голосов
/ 26 марта 2012

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

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

Как лучше всего с этим справиться? Должен ли я вручную установить длину содержимого 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");
    }
}

Я установил свойство content-type запроса в методе init класса.

Есть идеи?

1 Ответ

1 голос
/ 26 марта 2012

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

...