NSMutableURLRequest http код состояния 413

У меня есть веб-сервис. Я использую его, чтобы принять базовое 64-строковое представление маленького (уменьшенного размера) изображения. Этот веб-сервис работает великолепно при использовании его с Fiddler и публикации запроса вручную. Когда я выполняю один и тот же запрос с NSMutableURLRequest (или ASIHTTPRequest), он всегда возвращает код состояния 413 (413 - "Объект запроса слишком большой").

Почему NSMutableURLRequest заставляет его выдавать 413, а Fiddler каждый раз возвращает 200?

Вот мой код NSMutableURLRequest. Я мог бы использовать толчок, если у кого-то есть идеи.

        //the image request
        NSMutableURLRequest *imageRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_IMAGE_API_URL] 
                                                                  cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                              timeoutInterval:240.0];

        //the post parameters
        [imageRequest setHTTPMethod:@"POST"];
        [imageRequest setHTTPBody:[imageMessage dataUsingEncoding:NSUTF8StringEncoding]];
        [imageRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];


        //a few other things
        NSURLResponse* imageresponse;
        NSError *imageerror;


        NSData* imageresult = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:&imageresponse error:&imageerror];
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)imageresponse;

        NSLog(@"imageresponse: %d", httpResponse.statusCode);

2 ответа

Решение

Я нашел решение для этого. Проблема была не на стороне Apple, а на стороне IIS. Существует дополнительный параметр для приложений, размещенных на IIS (одним из которых является моя служба WCF), помимо указанного в файле WCF web.config, который указывает "uploadReadAheadSize" для каждой службы. Я увеличил это, и 413 ушел. Интересно, что я не получил эту ошибку при отправке HTTP-запроса от Fiddler на настольном клиенте в той же сети, что и сервер, на котором находится служба. По сути, у меня было решение проблемы этого парня, но не его контекст. Моим решением был его контекст.

Когда я вижу этот бит вашего кода:

//the image request
NSMutableURLRequest *imageRequest = 
    [NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_IMAGE_API_URL]  
                            cachePolicy:NSURLRequestUseProtocolCachePolicy   
                        timeoutInterval:240.0];

Я предполагаю, что у вас есть некоторые странные персонажи в вашем "POST_IMAGE_API_URL"#define, скорее всего, в параметрах, которые вы передаете.

Вам нужно, чтобы URL кодировал строку URL, которую вы передаете в свой запрос URL.

Попробуйте сделать:

// assuming POST_IMAGE_API_URL starts with a "@" character
NSString * yourURLAsString = [NSString stringWithString: POST_IMAGE_API_URL]; 
NSURL * yourEncodedURL = [yourURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

и передайте "yourEncodedURL" в качестве параметра URLRequest.

Другие вопросы по тегам