我正在构建一个带有 CakePHP 后端的 REST API。我正在尝试获取可以在 iOS 6.1 中使用 AFNetworking 解析的 JSON 响应,但是当我尝试使用 AFNetworking 访问我的 API URL 时出现错误。
这是对 AFNetworking 的有问题的调用:
[self postPath:@"/marks/markfav/1162" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
dispatch_async(dispatch_get_main_queue(), ^{
if (DEMO_LOGGING) NSLog(@"Done refreshing");
});
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Request Failed with Error: %@", error.userInfo);
});
}];
这是错误转储的结果:
2013-06-05 00:19:35.018 ToWatchList[67945:c07] Request Failed with Error: {
AFNetworkingOperationFailingURLRequestErrorKey = "<NSMutableURLRequest http://towatchlist.com/marks/markfav/1162>";
AFNetworkingOperationFailingURLResponseErrorKey = "<NSHTTPURLResponse: 0x8574250>";
NSErrorFailingURLKey = "http://towatchlist.com/marks/markfav/1162";
NSLocalizedDescription = "Expected status code in (200-299), got 500";
NSLocalizedRecoverySuggestion = "{\"name\":\"An Internal Error Has Occurred.\",\"message\":\"\\/\"}";
}
我很确定 PHP 后端工作正常,因为我可以用 curl 打它并获得预期的结果(注意我打的 URL 与上面的错误相同,都是 POST 请求):
$ curl -i --request POST http://towatchlist.com/marks/markfav/1162
HTTP/1.1 200 OK
Date: Wed, 05 Jun 2013 07:21:46 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.3.10-1ubuntu3.6
Set-Cookie: CAKEPHP=ijmosqrl26cao4jv8vqlt15sa6; expires=Wed, 05-Jun-2013 11:21:46 GMT; path=/; HttpOnly
Content-Length: 43
Content-Type: application/json; charset=UTF-8
{"result":"0","info":"Invalid Permissions"}
我在同一个文件中有另一个有效的 AFNetworking 调用:([self getPath:@"/marks/data.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
它通过 curl 和 iOS 都可以正常工作,你可以使用curl -i http://towatchlist.com/marks/data.json
)。
所以我不明白为什么我在第一次 AFNetworking 调用中得到奇怪的结果……我如何让它像 curl 在命令行上的行为一样?
PS:对于背景,通过使用我的基本 URL 调用此函数来设置 AFNetworking 来进行一些基本设置:
- (id)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if(!self)
return nil;
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
[self setParameterEncoding:AFJSONParameterEncoding];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
return self;
}