Mar*_*ark 12 iphone cocoa nsurlrequest
每当我在一个可变请求上设置一个主体,并将该方法设置为除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];
Run Code Online (Sandbox Code Playgroud)
chr*_*ton 14
我尝试了解有关它的更多最新信息,但有一篇关于您正在谈论的确切问题的旧帖子: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"];
Run Code Online (Sandbox Code Playgroud)
这里的所有都是它的.如果你添加这行代码,你的PUT请求将正常工作.
您还记得设置Content-Length
/Transfer-Encoding
和Content-Type
标题吗?我不认为这Content-Length
是自动为你添加的,这意味着服务器会假设它是 0。
更多信息:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html