这是我对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模式