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



这是我对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)块永远不会被调用。Err仍然为空,尽管statuscode为400。

如果成功,我将返回一个json响应。

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

不调用错误块,因为只有在发生系统级错误时才创建错误对象。这不会发生,因为请求被正确发送,服务器发送了响应。如果你在控制服务器,你应该让它返回状态码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
    }

查看NSError类引用:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/Reference/Reference.html

您可以尝试记录来自localizedDescription的错误消息。

您正在接收此状态码,因为Web服务器(运行Web站点)认为客户端(例如您的Web浏览器或我们的CheckUpDown机器人)发送的数据流是"畸形的",即没有完全尊重HTTP协议。因此,Web服务器无法理解请求并处理它

要在ios中记录上述问题,请访问此链接

如果你阅读了sendSynchronousRequest的文档…

错误在处理请求时发生错误时使用的Out参数。可以是NULL

这意味着error将是一个有效的NSError对象,以防出现问题来解决请求,比如错误的URL。

如果请求可以被解决,错误将为NULL,并且根据HTTP协议和您正在尝试连接的服务器,NSHTTPURLResponse对象将包含有关请求的所有信息。

一般是错误,认为每个状态码不同于200是一个错误,例如基于REST的API 204意味着空数据,在这种情况下,请求成功完成,但所请求的资源只是空数据,这不是一个错误。

所以关于你的问题,大多数时候错误是NULL,这是绝对好的,如果不意味着在到达目标服务器之前有问题,通常你必须考虑两者,错误和根据服务器,你试图谈论的状态码映射,在大多数情况下,REST模式

相关内容

最新更新