IOS - 网络(HTTP请求、同步请求、异步请求、JSON解析数据)

  1 //
  2 //  ViewController.m
  3 //  IOS_0129_HTTP请求
  4 //
  5 //  Created by ma c on 16/1/29.
  6 //  Copyright © 2016年 博文科技. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10 #import "MBProgressHUD+MJ.h"
 11
 12 @interface ViewController ()
 13 @property (weak, nonatomic) IBOutlet UITextField *textName;
 14 @property (weak, nonatomic) IBOutlet UITextField *textPassword;
 15
 16 - (IBAction)btnlogin;
 17
 18 @end
 19
 20 @implementation ViewController
 21 /*
 22  1.常见的发送HTTP请求的方案:
 23  1>苹果原生自带的
 24    NSURLConnection:用法简单,最经典,最直接
 25    NSURLSession:功能比NSURLConnection强大
 26    CFNetwork:NSURL底层,纯C语言
 27  2>第三方框架
 28    ASIHttpRequest:“HTTP终结者”,功能及其强大,可惜停止更新
 29    AFNetWorking:简单易用,提供基本够用的常用功能,维护者多
 30    MKNetWorkKit:简单易用,维护者使用者少
 31  3>建议
 32    为了提高开发效率,企业开发用的基本是第三方框架
 33
 34  2.常用类
 35  1>NSURL:请求地址
 36  2>NSURLRequest:一个NSURLRequest对象代表一个请求 - 包含信息有:
 37    a.一个NSURL对象
 38    b.请求方法、请求头、请求体
 39    c.请求超时
 40  3>NSMutableURLRequest:
 41  4>NSURLConnection - 负责发送请求,建立客户端与服务器的连接
 42    发送NSURLRequest的数据给服务器,并收来自服务器响应的数据
 43
 44  3.NSURLConnection使用步骤:
 45    1>创建NSURL对象,并设置请求路径
 46    2>传入一个NSURL对象创建NSURLRequest对象,设置请求头和请求体
 47    3>使用NSURLConnection发送NSURLRequest
 48  */
 49
 50 - (void)viewDidLoad {
 51     [super viewDidLoad];
 52
 53     self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
 54 }
 55 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 56 {
 57     [self.view endEditing:YES];
 58 }
 59
 60
 61 - (IBAction)btnlogin {
 62
 63     NSString *usernameText = self.textName.text;
 64     if (usernameText.length == 0) {
 65         [MBProgressHUD showError:@"请输入账号"];
 66         return;
 67     }
 68     self.textPassword.secureTextEntry = YES;
 69     NSString *password = self.textPassword.text;
 70     if (password.length == 0) {
 71         [MBProgressHUD showError:@"请输入密码"];
 72         return;
 73     }
 74     NSLog(@"发送数据给服务器");
 75
 76     /*
 77      接口文档:定义描述服务器端的请求接口
 78      1>请求路径URL:客户端应该请求哪个路径
 79      2>请求参数:客户端要发给服务器的数据
 80      3>请求结果:服务器要返回什么给客户端
 81      */
 82
 83     //创建一个NSURL:请求路径
 84     NSString *strURL = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText,password];
 85     NSURL *url = [NSURL URLWithString:strURL];
 86     //创建一个请求
 87     NSURLRequest *request = [NSURLRequest requestWithURL:url];
 88
 89     //同步请求
 90     [self sendSyncWithRequest:request];
 91     //异步请求
 92     [self sendAsyncWithRequest:request];
 93
 94 }
 95 //异步请求
 96 - (void)sendAsyncWithRequest:(NSURLRequest *)request
 97 {
 98     NSOperationQueue *queue = [NSOperationQueue mainQueue];
 99
100     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
101         //这个block会在请求完毕的时候自动调用
102         if (connectionError || data == nil) {
103             [MBProgressHUD showError:@"请求失败"];
104             return;
105         }
106         //解析服务器返回的JSON数据
107         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
108         NSString *error = dict[@"error"];
109         if (error) {
110             [MBProgressHUD showError:error];
111         }
112         else{
113             NSString *success = dict[@"success"];
114             [MBProgressHUD showSuccess:success];
115         }
116     }];
117 }
118
119 //同步请求
120 - (void)sendSyncWithRequest:(NSURLRequest *)request
121 {
122     //发送用户名和密码给服务器(HTTP协议)
123     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
124     /*
125      JSON
126      1>JSON是一种轻量级的数据格式,一般用于数据交互
127      服务器返回给客户端的数据一般都是JSON格式或者XML格式
128      标准的JSON合适注意点:key必须用双引号
129
130      2>要想从JSON中挖出具体数据得对JSON进行解析
131      JSON           OC
132      {}-----------NSDictonary
133      []-----------NSArray
134      " "-----------NSString
135      数字-----------NSNumber
136
137      3>JSON解析方案
138      第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
139      苹果原生(自带):NSJSONSerialization(性能最好)
140      4>JSON数据转-->OC对象
141      + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
142      5>OC对象-->JSON数据
143      + (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
144      */
145     //解析服务器返回的JSON数据
146     NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
147     NSString *error = dict[@"error"];
148     if (error) {
149         [MBProgressHUD showError:error];
150     }
151     else{
152         NSString *success = dict[@"success"];
153         [MBProgressHUD showSuccess:success];
154     }
155
156 }
157 @end
时间: 2024-10-22 23:32:16

IOS - 网络(HTTP请求、同步请求、异步请求、JSON解析数据)的相关文章

iOS网络编程之同步、异步、请求队列 2014-12-7

1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替. - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request star

【Java&amp;Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

[IOS_HTTP]NSURLConnection同步与异步请求

今天看到<WIN32多线程程序设计>的同步控制时,才发现原来自己对同步和异步的概念很模糊,甚至混淆.于是GOOGLE了一下.下面都是高人们的见解,简单明了. 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式.  异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式. 举个不太恰当的例子,就像:  SendMessage(...)  TRACE0("just  like  send");   PostMessage(...) 

关于jquery同步和异步请求问题总结

关于jquery同步和异步请求问题总结 问题 这几天做项目的时候,写脚本遇到一个问题,就是jquery异步请求和同步请求执行顺序不按代码顺序执行而是最后执行导致添加数据报错,添加到空值,这怎么忍,于是我去查找jquery api,终于知道了原来jquery默认异步请求,防止数据卡死,终于让我找到了这货 async,当async: true 时,ajax请求是异步的.当async : true 时,就是同步的,但是我又有个问题,怎么设置,这个在哪设置,用$.ajax去写这个操作,不,不太麻烦了,到

jquery 同步和异步请求

1. $.ajax 同步和异步请求 1 $.ajax({ 2 type: "POST", 3 url: "some.php", 4 async : true, // true 异步,false 同步 5 // or data:{name:"John",locationi:"Boston"} 6 data: "name=John&location=Boston", 7 success: functio

C# ASP.NET Core使用HttpClient的同步和异步请求

引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string statusCode) { string result = string.Empty; //设置Http的正文 HttpContent httpContent = new StringContent(postData); //设置Http的内容标头 httpContent.Headers.ContentType

iOS 中json解析数据出现中文乱码的问题

一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢? 一般都是通过转码来解决,但是直接转码,是不能达到效果的,例如 [jsonStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 这样直接转码是达不到效果的. 解析数据的时候,可以先把数据存放在NSdata对象中,

同步和异步请求

// //  ViewController.m //  UI-NO-18 // //  Created by Bruce on 15/8/13. //  Copyright (c) 2015年 Bruce. All rights reserved. // #import "ViewController.h" #import "InfoModel.h" @interface ViewController () @end @implementation ViewCont

同步、异步请求

IOS之同步请求.异步请求.GET请求.POST请求 1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高