У меня есть синхронный метод для отправки запросов, который выглядит следующим образом:
+ (NSString *)sendRequest:(NSMutableURLRequest *)request {
NSHTTPURLResponse *response;
NSError *error;
NSData *responseData =
[NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
NSLog(@"response = %@", response);
NSLog(@"error = %@", [error localizedDescription]);
NSString *responseString =
[[NSString alloc] initWithData:responseData
encoding:NSUTF8StringEncoding];
[responseString autorelease];
NSLog(@"%@: %@", [request HTTPMethod], [request URL]);
NSLog(@"Response Code: %d", [response statusCode]);
NSLog(@"Content-Type: %@", [[response allHeaderFields]
objectForKey:@"Content-Type"]);
NSLog(@"Response: %@\n\n", responseString);
return responseString;
}
Для конкретного запроса я получаю нулевой ответ с ошибкой, говорящей «Операция не может быть завершена. (NSURLErrorDomain error -1012.) "
В соответствии с ссылкой на константы Foundation этот код является NSURLErrorUserCancelledAuthentication, который описывается как
Возвращается при асинхронном запросе нааутентификация отменяется пользователем.
Обычно это происходит при нажатии кнопки «Отмена» в диалоге имени пользователя / пароля, а не при попытке аутентификации пользователем.
Тем не менее, я не нажимаю кнопку отмены.Я просто делаю запрос на получение списка событий без авторизации, и поэтому возвращаемый мной 401 должен выдать неавторизованный ответ, а не пустой ответ с ошибкой NSURLErrorUserCancelledAuthentication.Мой код Rails, который возвращает этот ответ, выглядит следующим образом:
def require_auth
# Return unauthorized if the API call was not made by an authorized user
unless current_user
respond_to do |format|
#format.json { render :text => "Unauthorized", :status => :unauthorized }
format.json { head :unauthorized }
format.xml { head :unauthorized }
end
end
end
и вывод из моего журнала Rails выглядит следующим образом:
Started GET "/events.json" for
127.0.0.1 at Fri Jan 07 10:51:47 -0500 2011
Processing by EventsController#index as JSON Completed 401 Unauthorized in 0ms
Кто-нибудь знает, почему это происходит и каксоздать правильный ответ?