NSURLRequest не может обработать Тело HTTP, когда методом не является POST?

Каждый раз, когда я установил тело по изменяемому запросу с набором метода к чему-либо кроме POST, тело не включено в запрос, и я получаю kCFErrorDomainCFNetwork ошибку 303 (kCFErrorHTTPParseFailure), когда сервер отвечает. Изменение метода к POST является всем, что требуется, чтобы запрос прошел без ошибки. Там какой-либо путь состоит в том, чтобы присоединить тело к другим методам или застревает мы с POST для всего?

Это - код представления:

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:assembleURL]];// cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:45.0];

#if (SERVER_TARGET_ARGS_ALLOWED==1)
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[req setHTTPMethod:ServerMessageMethods[operation]];    //value is @"POST" or other method name

#endif  

//run the payload into a JSON
SBJsonWriter *json = [[SBJsonWriter alloc] init];
NSString *encodedPayload = [json stringWithObject:payload];
encodedPayload = [NSString stringWithFormat:@"%@", [encodedPayload stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *dataPayload = [encodedPayload dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPBody:dataPayload];

NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];
12
задан Mark 12 August 2010 в 14:58
поделиться

2 ответа

Вы не забыли установить заголовки Content-Length/Transfer-Encoding и Content-Type? Я не думаю, что Content-Length вставляется автоматически для вас, что означает, что сервер будет считать, что это 0.

Больше информации: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

0
ответ дан 2 December 2019 в 21:22
поделиться

Я пытался найти более свежую информацию об этом, но там было старое сообщение именно о той проблеме, о которой вы говорите: http://lists.apple.com/archives/cocoa-dev/2004/May/msg01847.html

В основном, они упоминают, что это ошибка в коде. К сожалению, я хотел бы найти что-то более свежее, что подтверждает это.

Код, который я использовал, это ASIHTTPRequest, и он определенно может выполнять PUT-запросы, поскольку они используют набор кода более низкого уровня для создания HTTP-сообщений и не полагаются на NSMutableUrlRequest.

Кроме того, я нашел еще одну статью в блоге, в которой говорится об этой проблеме и о том, что нужно указать для PUT-запроса. http://iphonedevelopment.blogspot.com/2008/06/http-put-and-nsmutableurlrequest.html

запись в блоге:

При использовании NSMutableURLRequest для выполнения HTTP PUT запроса, добавьте следующую строку кода (req - NSMutableURLRequest):

[req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

Вот и все. Если вы добавите эту строку кода, ваши PUT-запросы будут работать просто отлично.

14
ответ дан 2 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: