您好,
我正在努力对REST解析API进行POST请求。我正在使用AFNetworking 2.0。我的AFHTTPSessionManager子类代码如下所示:
+ (ParseAPISession *)sharedSession {
static ParseAPISession *sharedSession = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedSession = [[ParseAPISession alloc] initWithBaseURL:[NSURL URLWithString:kSDFParseAPIBaseURLString]];
});
return sharedSession;
}
和:
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (self) {
[self.requestSerializer setValue:kSDFParseAPIApplicationId forHTTPHeaderField:@"X-Parse-Application-Id"];
[self.requestSerializer setValue:kSDFParseAPIKey forHTTPHeaderField:@"X-Parse-REST-API-Key"];
}
return self;
}
我在做这样的请求:
[[ParseAPISession sharedSession] POST:@"ClassName" parameters: [NSDictionary dictionaryWithObjectsAndKeys:@"name", @"name", nil]
success:^(NSURLSessionDataTask *task, id abc) {
NSLog(@"%@", abc);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@", error);
}];
这样做我总是会遇到这种错误:
错误域= NSCocoaErrorDomain代码= 3840“操作无法完成。(可可错误3840。)”(JSON文本不是以数组或对象开头,并且没有允许设置片段的选项。)UserInfo = 0x8c72420 {NSDebugDescription = JSON文本并非以数组或对象以及允许未设置片段的选项开头。}
由于GET Request就像一个超级按钮一样工作,我很困惑为什么我不能发布某些东西。有人可以让我停顿一下这个问题吗?
最好的祝福!
更新
不幸的是,经过大量测试后,此错误消息不再显示了,不幸的是又出现了:
<NSHTTPURLResponse: 0x8b96d40>
{ URL: https://api.parse.com/1/users }
{ status code: 400,
headers {
"Access-Control-Allow-Origin" = "*";
"Access-Control-Request-Method" = "*";
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 130;
"Content-Type" = "application/json; charset=utf-8";
Date = "Wed, 30 Oct 2013 20:01:58 GMT";
Server = "nginx/1.4.2";
"Set-Cookie" = "_parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNjIxZjUxMzY3NWVhZWJmMDYyYWYwMGJiZTQ3MThmMWE%3D--851bd31b07e7dba2c5f83bb13a8d801ecbea42c4; domain=.parse.com; path=/; expires=Fri, 29-Nov-2013 20:01:58 GMT; secure; HttpOnly";
Status = "400 Bad Request";
"X-Runtime" = "0.060910";
"X-UA-Compatible" = "IE=Edge,chrome=1";
} }
谁能告诉我状态:400错误的请求告诉我什么以及如何摆脱它?
此错误表示您的POST请求已通过,服务器已成功向您返回一些数据,这NSJSONSerialization
在解析时遇到了麻烦。
您可能需要将其设置AFJSONResponseSerializer
为允许JSON片段。
在子类的init
方法中AFHTTPSessionManager
:
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[self setResponseSerializer:responseSerializer];
如果这不起作用,则可能是编码问题。从NSJSONSerialization
类参考:
数据必须采用JSON规范中列出的5种受支持的编码之一:UTF-8,UTF-16LE,UTF-16BE,UTF-32LE,UTF-32BE。数据可能有或没有BOM。用于解析的最有效编码是UTF-8,因此,如果可以选择对传递给此方法的数据进行编码,请使用UTF-8。
检查服务器发送的编码类型。
最后,您可以在AFNetworking内部设置断点,或者设置AFNetworkActivityLogger,它将记录请求在发送和接收到控制台时的记录。该工具对于调试此类问题非常有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句