iOS HTTP 请求 - 获取错误响应消息

标签 ios ios6 http-get

这是我对 REST api 执行 GET 请求的代码。

如果出现错误,我不确定如何取回消息:

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    NSURL *URL = [NSURL URLWithString:urlString];
    [request setURL:URL];
    [request setHTTPMethod:@"GET"];

    NSError *err = nil;
    NSHTTPURLResponse *res = nil;
    NSData *retData = [NSURLConnection sendSynchronousRequest:request returningResponse:&res error:&err];
    if (err) // This part is never called.
    {
        NSLog(@"Error: %@", err);
    }
    else
    {
        if (res.statusCode != 200)
        {
//            show the user the status message
            NSLog(@"Error: %@", res); // This part is called

        }
        else
        {

        }
    }

如果不成功,我想收到错误消息。但 if (err) block 永远不会被调用。尽管状态代码为 400,但 err 仍然为 null。

如果成功,我将收到一个 json 响应。

在上面的代码中,我得到了 400 的 statusCode

最佳答案

不会调用错误 block ,因为仅当发生系统级错误时才会创建错误对象。不会发生这种情况,因为请求已正确发送并且服务器发送了响应。如果您控制服务器,您可能应该让它返回状态代码 200 并在响应中包含应用程序级别状态代码,这将告诉您的应用程序输入的凭据不正确。

编辑:

要获取状态消息,您可以使用

+ (NSString *)localizedStringForStatusCode:(NSInteger)statusCode

这是 NSHTTPURLResponse 类的类方法。

    if (res.statusCode != 200)
    {
//            show the user the status message
        NSLog(@"Error: %@", [NSHTTPURLResponse localizedStringForStatusCode: res.statusCode]); // This part is called

    }

关于iOS HTTP 请求 - 获取错误响应消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708899/

相关文章:

ios - Markdown 和链接的特定正则表达式

iphone - Apple iOS6 map - 目的地地址 > 显示公司名称而不是纬度/经度

javascript - $http.GET 中的 JSON 数组返回未定义,即使它不应该返回

php - 在 Laravel Controller 中检索 GET 和 POST 数据

ios - 在 SwiftUI 中实现外部显示器支持

ios - 适用于 iOS 和 iPad 的 Storyboard

iphone - MKMapView ClipsToBounds 在 iOS 6 上不起作用

xcode - 无法更改应用程序的可执行权限

java - 使用 HttpClient.Execute(HttpGet) 重定向后获取 URL

ios - 运行 1 个自定义 shell 脚本中的 1 个卡住