2011-11-03 24 views
8

Wykonuję usługę w naszej firmie klienta. I próbuję uzyskać pewne informacje z ich serwera przez AFNetWorking (Nasz klient zachęca do korzystania z AFNetWorking) Zrobiłem kilka próbek przy użyciu AFNetWorking i to działa. Ale kiedy użyć jednego z naszych klientów, aby uzyskać URL danych JSON, nie udało się i to jest opis błędu:Kod błędu -1011 podczas korzystania z AFNetWorking

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} 

próbuję dowiedzieć się jakieś rozwiązanie, ale nie można jeszcze naprawić. Jest mój kod:

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]; 

Dzięki za przeczytanie, a każda pomoc lub odpowiedź będą bardzo mile widziane.

EDYCJA: Jak powiedział DarkDust: serwer odmawia dostępu. Ale mogę pobrać dane z serwera przez podstawowego połączenia: Oto kod, aby uzyskać:

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]]; 
} 

Zastanawiam się dlaczego rssConnection można uzyskać tekst JSON i AFHTTPClient nie może?

+1

Czy uważasz, że dobrym pomysłem jest opublikowanie wewnętrznych/prywatnych informacji o kliencie bez utrudniania? – DarkDust

+0

To tylko strona testowa, a nie strona prywatna. Zanim skończę, będzie więcej zmian. A w przyszłości potrzebny będzie klucz API, aby uzyskać dostęp i oczywiście ukryję to. – magichero

+1

Nadal każdy może teraz zobaczyć, kim jest twój klient. Twój klient może nie być z tego powodu szczęśliwy. – DarkDust

Odpowiedz

1

Serwer odpowiada kodem błędu HTTP 403, który oznacza Forbidden. Odrzuca dostęp. Musisz dowiedzieć się dlaczego, na przykład czytając logi serwera (jeśli możesz) lub prosząc administratora serwera o pomoc. Mogą to być ograniczenia dostępu do serwera, które należy podnieść/zmodyfikować.

Edytuj: HTTP POST to operacja, która chce zapisać coś na serwerze. Podczas gdy normalne GET wydaje się działać dobrze, zgodnie z Twoim edytowanym pytaniem, zapisywanie jest teraz zabronione. Pierwszą rzeczą do zrobienia jest sprawdzenie konfiguracji serwera. Dodatkowo, jeśli adres URL wskazuje na skrypt (JSP, ASP, cokolwiek), co jest jedyną rzeczą, która ma sens w twoim przypadku, musisz to sprawdzić, aby ustalić, dlaczego odmawia Ci dostępu (jeśli konfiguracja serwera nie została już odmówiona to musi być skrypt).

+0

Opublikowany komunikat o błędzie zawiera komunikat "Oczekiwany kod statusu ..., otrzymałem 403". Serwer odmawia ci dostępu. – DarkDust

+0

Edytuję mój wpis, ponieważ po dodaniu komentarza nie mogę wyraźnie powiedzieć, czego potrzebuję. – magichero

+0

@magichero: Zaktualizowano moją odpowiedź. – DarkDust

23

Jako odniesienie powodu wysokiego wyniku wyszukiwania poprzez google ...

Dla innych, którzy szukają możliwych kodów błędów pobierane poprzez AFNetworking, zapoznać się z dokumentacją jabłko dla URL Loading System Error Codes ponieważ są one takie same.

NSURLErrorBadServerResponse = -1011

Zwracany gdy system URL Ładowanie otrzymuje uszkodzone dane z serwera. Jest to odpowiednik komunikatu "Błąd 500 serwera" wysłanego przez serwery HTTP.