10

私は顧客企業でサービスを行っています。そして、AFNetWorking を使用してサーバーから情報を取得しようとしました (当社の顧客は AFNetWorking の使用を推奨しています)。AFNetWorking を使用していくつかのサンプルを作成しました。しかし、カスタマー URL の 1 つを使用して 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 を介して取得された可能性のあるエラー コードを探している他のユーザーについては、Apple のドキュメントでURL 読み込みシステム エラー コードを参照してください。これらは同じです。

NSURLErrorBadServerResponse = -1011

URL 読み込みシステムがサーバーから不正なデータを受信した場合に返されます。これは、HTTP サーバーから送信される「500 サーバー エラー」メッセージに相当します。

于 2013-10-18T12:53:17.027 に答える
1

サーバーは、禁止を意味するHTTPエラーコード403で応答しています。アクセスを拒否します。たとえば、サーバーログを読み取るか(可能な場合)、サーバー管理者に支援を依頼することで、理由を確認する必要があります。解除/変更する必要があるのは、サーバーへのアクセス制限である可能性があります。

編集:HTTPPOSTは、サーバーに何かを保存したい操作です。GET編集した質問によると、通常は問題なく動作しているようですが、現在保存は禁止されています。最初に行うことは、サーバー構成を調べることです。さらに、URLがスクリプト(JSP、ASPなど)を指している場合、それがあなたのケースで意味をなす唯一のものである場合は、それを調べて、アクセスを拒否する理由を判断する必要があります(サーバー構成がまだ拒否していない場合)それ、それはスクリプトでなければなりません)。

于 2011-11-03T08:36:46.633 に答える