NSUrlConnectionDelegate - Получение кодов статуса http - PullRequest
34 голосов
/ 03 августа 2011

в iOS, как я могу получить код состояния http (404 500 200 и т. Д.) Для ответа от веб-сервера.Я предполагаю, что это в NSUrlConnectionDelegate.

Objective-C или Monotouch .NET ответ хорошо.

Ответы [ 4 ]

87 голосов
/ 03 августа 2011

Да, вы можете получить код состояния в методе делегата -didRecieveResponse:

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
   NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
   int code = [httpResponse statusCode];
}
11 голосов
/ 03 августа 2011
NSHTTPURLResponse* urlResponse = nil;
NSError *error = nil;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

В асинхронном запросе также должен быть способ получить NSHTTPURLResponse ..

Вы получите код состояния, подобный этому:

int statusCode = [urlResponse statusCode];
int errorCode = error.code;

В случае некоторых часто используемых кодов ошибок (например, 404) он будет вставлен в ошибку, но с другим кодом (401 будет -1012).

3 голосов
/ 03 августа 2011

Вот как это сделать в MonoTouch для .NET для тех пользователей C #.Это в NSUrlConnectionDelegate .

public override void ReceivedResponse (NSUrlConnection connection, NSUrlResponse response)
{
  if (response is NSHttpUrlResponse)
  {
    var r = response as NSHttpUrlResponse;
    Console.WriteLine (r.StatusCode);
   }
}
1 голос
/ 03 августа 2011

Глядя на этот другой вопрос стекового потока похоже, что вы можете обрабатывать коды состояния http в методе делегата - (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response:

- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse*)response 
{
    if ([response isKindOfClass: [NSHTTPURLResponse class]])
        statusCode = [(NSHTTPURLResponse*) response statusCode];
}
...