1. HTTP访问请求
1.1 从 Xcode 7.0 开始,要求服务器支持 HTTPS,支持 SSL1.2 版本
1.2 这样做更安全
1.3 默认情况下,不做任何设置,同时服务器没有升级,无法进行网络访问
2. Info.plist 添加权限
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
3. OC 调用代码
-(void) demo{
NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/data/sk/101010100.html"];
[[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 反序列化
id result = [NSJSONSerialization JSONObjectWithData:data options: 0 error:NULL];
NSLog(@"%@",result);
}] resume];
}
4. Swift 调用代码
func demo(){
let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")
// '_' 表示忽略
// Session 默认超时时长 60 秒
URLSession.shared.dataTask(with: url!) { data, _, _ in
// JSON 是一个特殊格式的字符串
let jsonStr = "[\"name\",\"age\"]"
let jsonData = jsonStr.data(using: String.Encoding.utf8)
//反序列化 - ‘throws’ 2.0 的语法,捕获异常
// do{
// let rusult = try JSONSerialization.jsonObject(with: jsonData!, options: [])
// print(rusult)
// }catch{
// //如果反序列化失败,能够捕获到 json 失败的准确原因,而不会崩溃
// print(error)
// }
//OC 中的按位枚举的方式 改为 数组的方式设置 [值1,值2]
// try! 如果数据不正确,程序会崩溃
//let result = try! JSONSerialization.jsonObject(with: jsonData!, options: [JSONSerialization.ReadingOptions.mutableContainers,JSONSerialization.ReadingOptions.mutableLeaves])
//print(result)
guard let result = try? JSONSerialization.jsonObject(with: jsonData!, options: [JSONSerialization.ReadingOptions.mutableContainers,JSONSerialization.ReadingOptions.mutableLeaves]) else {
print("反序列化失败")
return
}
print(result)
}.resume()
}