web-dev-qa-db-fra.com

NSUrlConnectionDelegate - Obtention des codes d'état http

sous iOS, comment puis-je recevoir le code d'état http (404 500 200, etc.) pour une réponse d'un serveur Web. Je suppose que c'est dans le NSUrlConnectionDelegate.

Objective-C ou Monotouch .NET réponse ok.

34
BahaiResearch.com

Oui, vous pouvez obtenir le code d'état dans la méthode déléguée -didRecieveResponse:

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
   NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
   int code = [httpResponse statusCode];
}
87
Vladimir
NSHTTPURLResponse* urlResponse = nil;
NSError *error = nil;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

La demande aSynchronous devrait également avoir un moyen d'obtenir NSHTTPURLResponse.

Vous obtenez le code d'état comme ceci:

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

Dans le cas de certains codes d'erreur très utilisés (comme 404), il sera mis dans l'erreur mais avec un code différent (401 sera -1012).

11
Manuel

Voici comment le faire dans MonoTouch pour .NET pour ces utilisateurs C #. C'est dans le NSUrlConnectionDelegate.

public override void ReceivedResponse (NSUrlConnection connection, NSUrlResponse response)
{
  if (response is NSHttpUrlResponse)
  {
    var r = response as NSHttpUrlResponse;
    Console.WriteLine (r.StatusCode);
   }
}
3
BahaiResearch.com

En regardant cette autre question de stackoverflow il semble que vous pouvez gérer les codes d'état http dans la méthode déléguée - (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response:

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