用于检查服务器是不是可访问的 JSON 答案

Posted

技术标签:

【中文标题】用于检查服务器是不是可访问的 JSON 答案【英文标题】:JSON answer to check if a server is reachable用于检查服务器是否可访问的 JSON 答案 【发布时间】:2012-11-01 19:33:28 【问题描述】:

我有一个刚刚打开的应用程序调用了一个网络服务器页面,它给了我一个 json 字符串。 当我在本地网络上时,一切正常,但是当我在本地网络之外打开应用程序并且没有 *** 时,应用程序崩溃。 如何控制 json 字符串? 这是我的代码:

NSString *urlstr = [[NSString alloc] initWithFormat:@"%@yes.php", av];
NSURL *url = [[NSURL alloc] initWithString:urlstr];

NSError* error = nil;
NSString* urlString = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
NSString *newStr;

NSData* data=[newStr dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 

                                                     options:kNilOptions 
                                                       error:&error];

sn1 = [[json objectForKey:@"Rele1"] intValue];

我想将 json 答案与 NULL 值进行比较,如果两个参数相等,我会显示警报。

编辑:如果我尝试读取任何值,应用程序会在等待 json 回复时崩溃... 我已经绕过了带有 timeoutInterval 参数的 NSURLRequest 问题,该参数会在 n 秒后关闭连接。

【问题讨论】:

您有一个error:&error 参数,但您在调用后从不检查它。我对您使用的 API 完全没有经验,但我敢打赌,发生错误时结果将无法使用。 【参考方案1】:

除其他外,您未能:

检查从远程 URL 获取 ASCII 编码字符串的尝试是否失败(明显的可能性:URL 不可访问,结果是 UTF-8 而不是 ASCII); 检查JSON解析是否成功(明显的可能:服务器404d,而是返回了html错误页面) 检查返回的 JSON 对象是否实际上是一个字典(例如,它可能是一个数组,在这种情况下调用 objectForKey: 会引发异常)

将返回数据解析为 ASCII 然后重新编码为 UTF-8 也可能是多余的 - 因为一个超集另一个它具有阈值测试的效果,否则会阻止可接受的结果继续进行。

【讨论】:

【参考方案2】:

这段代码有用过吗?

    您应该在[NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; 之后检查error 您正在将 URL 数据读入 urlString,然后从未初始化的 newStr 获取 NSData 并解析它? 再次强调,无论何时提供error,您都应该先检查它,然后再进行其他操作 为什么将数据读取为 ASCII 而将 NSData 读取为 UTF8?

【讨论】:

以上是关于用于检查服务器是不是可访问的 JSON 答案的主要内容,如果未能解决你的问题,请参考以下文章

laraveljwt检查是不是携带token

laravel jwt检查是不是携带token

针对 URL 中的特定页面检查可访问性

JSON详解

浅谈JSON安全小知识

Android 检查服务器响应是不是“是”JSON