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.