10

我在我们的客户公司做服务。我尝试通过 AFNetWorking 从他们的服务器获取一些信息(我们的客户鼓励使用 AFNetWorking)我使用 AFNetWorking 做了一些示例,它的工作。但是当我使用我们的一个客户 URL 来获取 JSON 数据时,它失败了,这是错误描述:

Error Domain=com.alamofire.networking.error Code=-1011 
"Expected status code <NSIndexSet: 0x7e274f0>[number of indexes: 100 (in 1 ranges), 
indexes: (200-299)], got 403" UserInfo=0x7b64040 {NSErrorFailingURLKey=<url_hidden_for_stackoverflow>, 
NSLocalizedDescription=Expected status code <NSIndexSet: 0x7e274f0>[number of indexes: 100 (in 1 ranges), indexes: (200-299)], got 403}

我试图找出一些解决方案,但我还不能解决。这是我的代码:

NSURL *url = [NSURL URLWithString:@"http://example.com/"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
//[httpClient setDefaultHeader:@"Accept" value:@"text/json"];
//NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:CONST_KEY_REGISTER_UNIQUE_KEY, CONST_API_KEY_TEXT,nil];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"path/to/page.json" parameters:nil];
[httpClient release];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    NSString *status = [JSON valueForKey:@"status"];
    if ([status isEqualToString:@"OK"]) {
        NSString *uniqueId = [JSON valueForKey:@"uniqueId"];
        [UserSettings setWithKey:CONST_PROGRAM_UNIQUE_KEY value:uniqueId];
    }
    //NSString *message = [json valueForKey:@"message"];
    //NSString *error = [json valueForKey:@"error"];
    [[LoadingView instance] performSelectorOnMainThread:@selector(removeLoadingView)  withObject:nil waitUntilDone:YES];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    NSString *errorString = [error description];
    [[LoadingView instance] performSelectorOnMainThread:@selector(removeLoadingView)  withObject:nil waitUntilDone:YES];
}];
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
[queue addOperation:operation];

感谢您的阅读,任何帮助或回复将不胜感激。

编辑:正如 DarkDust 所说:服务器拒绝我的访问。但我可以通过基本连接从服务器获取数据:这是获取的代码:

NSURL *url = [NSURL URLWithString:@"http://example.com/path/to/page.json"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:CONST_CONNECTION_TIMEOUT];
rssConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
[self performSelectorOnMainThread:@selector(downloadStarted) withObject:nil waitUntilDone:NO];
if (rssConnection != nil) {
    do {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    } while (!done);
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // I can get text here, but it is not JSON format
NSString *content = [NSString stringWithUTF8String:[data bytes]];
}

我想知道为什么 rssConnection 可以获取 JSON 文本而 AFHTTPClient 不能?

4

2 回答 2

25

作为参考,因为通过谷歌搜索结果很高......

对于正在寻找通过 AFNetworking 检索到的可能错误代码的其他人,请参阅苹果文档以获取URL 加载系统错误代码,因为它们是相同的。

NSURLErrorBadServerResponse = -1011

当 URL 加载系统从服务器接收到错误数据时返回。这相当于 HTTP 服务器发送的“500 服务器错误”消息。

于 2013-10-18T12:53:17.027 回答
1

服务器以 HTTP 错误代码 403 进行响应,这意味着Forbidden。它拒绝您访问。您需要找出原因,例如通过阅读服务器日志(如果可以)或请求服务器管理员帮助您。可能需要解除/修改服务器上的访问限制。

编辑:HTTPPOST是一种希望在服务器上保存某些内容的操作。虽然GET根据您编辑的问题,正常似乎工作得很好,但现在禁止保存。首先要做的仍然是检查服务器配置。此外,如果您的 URL 指向一个脚本(JSP、ASP 等),这在您的情况下是唯一有意义的,您需要检查它以确定它拒绝您访问的原因(如果服务器配置尚未拒绝它,它必须是脚本)。

于 2011-11-03T08:36:46.633 回答