这是我对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)
块。虽然状态代码为400,但错误仍为空。
如果成功,我会得到一个json回复。
在上面的代码中,我得到一个400的statusCode
答案 0 :(得分:1)
未调用错误块,因为仅在发生系统级错误时才会创建错误对象。这不会发生,因为请求已正确发送,服务器发送响应。如果您控制服务器,则应该返回状态代码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
}
答案 1 :(得分:0)
看看NSError类引用:
您可以尝试从localizedDescription记录错误消息。
答案 2 :(得分:0)
您收到此状态代码是因为 - Web服务器(运行Web站点)认为客户端(例如您的Web浏览器或我们的CheckUpDown机器人)发送的数据流“格式错误”,即不遵守HTTP协议完全。因此,Web服务器无法理解请求并处理它
记录关于ios visit this link
的上述问题答案 3 :(得分:0)
如果您阅读了sendSynchronousRequest的文档......
错误 如果在处理请求时发生错误,则使用Out参数。可能是NULL。
这意味着如果解决请求存在问题(如格式错误的URL),则erro将是有效的NSError对象。
如果可以解析请求,则错误将为NULL并且根据HTTP协议,并且根据您尝试连接的服务器,NSHTTPURLResponse对象将包含有关请求的所有信息。
通常,错误认为每个不同于200的状态代码都是错误,例如,基于REST的API 204意味着空数据,并且在这种情况下请求成功完成但请求的资源只是空数据,这不是错误。
关于你的问题,绝对没错,大多数时候错误是NULL,如果不是意味着在到达目标服务器之前有问题,一般你必须考虑两者,错误并根据服务器你试图谈论状态代码映射,在大多数情况下是REST模式