您的位置:首页 > 理论基础 > 计算机网络

网络编程 同步异步加载 SET POST

2015-12-08 09:38 519 查看
/**

* 创建NSData类型对象,
用来接收异步请求回得数据

*/

@property(nonatomic,
retain) NSMutableData *asyData;

@end

@implementation ViewController

/*

gat和post的区别:

1.请求方式
参数部分: get采用字符串直接拼接的方法, post使用NSData类型数据拼接.
对安全性产生了影响. NSData类型使用二进制数,
不直接看到值. 相当于密文方式.



2.容量大小 get请求最多允许255字节的字符串, post的采用NSData最大可超过1G.



3.使用get更多,
因为简单.





同步请求弊端:
等所有信息全部返回之后才能显示下一步操作. 容易出现卡死现象.
大量数据时不能用.



*/

/*

同步请求的特点: 一旦发送请求,
当前程序一直等待获得全部响应信息, 才可以进行下一步操作. (页面假死现象)

*/

- (IBAction)getSyn:(id)sender {



NSLog(@"开始get同步方法");



//第一步:
获取地址

NSString *urlStr =
@"http://p1.pichost.me/i/40/1639665.png";



//第二步:
创建url对象

NSURL *url = [NSURL
URLWithString:urlStr];



//第三步:
创建网络请求对象 (NSURlRequest)

NSURLRequest *request = [NSURLRequest
requestWithURL:url];



//第四步:
创建响应对象 (NSURLResponse)

NSURLResponse *response =
nil;





//错误信息
可有可无

//如果网络有错误,
可以用来接收错误信息

NSError *error = nil;





//第五步:
创建网络链接,
并且获得返回的NSData



/**

* 参数说明: 1.请求对象; 2.用来接收响应的对象 (两个**
取址) 3.错误信息

*/

NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response error:&error];



//如果请求错误,
打印错误信息

if (error) {



NSLog(@"%@", error);


}else{



//进行数据解析



NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];





NSLog(@"%@", dic);




}










}
- (IBAction)postSyn:(id)sender {

NSLog(@"开始post同步方法");

//第一步:
获得地址

NSString *string =
@"http://mapi.pianke.me/pub/jing";



//第二步:
创建url对象

NSURL *url = [NSURL
URLWithString:string];



//第三步:
创建请求对象 (需要设置请求方式,
并且拼接参数, 所以需要使用可变的请求对象)

//参数不是都写在网址中的

NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url];



//第四步:设置请求方式(默认是GET,
注意: POST全大写)

//默认为get请求方式
[request
setHTTPMethod:@"POST"];



//第五步:
拼接POST请求参数部分

// (1).
获得参数字符串



//参数部分

NSString *bodyStr =
@"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";





// (2).
将参数字符串转化成NSData类型对象

//
方法: dataUsingEncoding 指定编码格式

NSData *bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];



//第六步:
设置请求参数
[request
setHTTPBody:bodyData];





//第七步:
设置响应对象和错误信息

NSURLResponse *response =
nil;



NSError *errol = nil;





//第七步:
建立网络链接, 获得响应数据

NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response error:&errol];





//最后一步:
进行数据解析

if (errol) {



NSLog(@"%@", errol);


}else{



NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];



NSLog(@"%@", dic);




}










}
- (IBAction)gatAsy:(id)sender {

NSLog(@"开始get的异步请求方法");





//1, 2
创建URL对象

NSURL *url = [NSURL
URLWithString:@"http://p1.pichost.me/i/40/1639665.png"];



//3.
创建网络请求对象 (NSURLRequest)

NSURLRequest *request = [NSURLRequest
requestWithURL:url];



//4.创建网络链接对象 (NSURLConnection)

//参数说明: 1.请求对象 2.代理人

NSURLConnection *connection = [NSURLConnection
connectionWithRequest:request
delegate:self];





//5.建立连接
[connection
start];





}

#pragma mark 获得响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{

NSLog(@"获得服务器响应");



//数据源,
最晚需要在获得响应时创建

self.asyData = [[NSMutableData
alloc]init];


}

#pragma mark 获得响应数据 (这个方法会多次执行,
每次获得部分响应信息)
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

NSLog(@"获得响应数据");

//每次调用这个方法,
返回一些data

//Data不一起给,
这个方法会执行多次,
每次拼接到上次的Data后, Data必须为NSMutableData



[self.asyData
appendData:data];


}

#pragma mark 接收响应信息结束
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

//进行数据解析

NSLog(@"完成数据加载,
结束接收响应");



NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:self.asyData
options:0
error:nil];



NSLog(@"%@", dic);




}

#pragma mark POST异步请求 (Block实现)

- (IBAction)postAsy:(id)sender {

NSLog(@"Post异步方法");



//第一步:
获得地址

NSString *string =
@"http://mapi.pianke.me/pub/jing";



//第二步:
获得URL对象

NSURL *url = [NSURL
URLWithString:string];



//第三步:
创建网络请求对象

NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url];



//第四步:
请求方式
[request
setHTTPMethod:@"POST"];



//获得请求参数

//(1).
获得参数字符串

NSString *bodyStr =
@"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";



//(2).
将参数字符串转化成NSData对象

NSData *bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];







//第六步:
设置请求参数
[request
setHTTPBody:bodyData];



//第七步:
开始异步请求

/**

* 参数说明

*

1.请求对象

2.主线程

3.Block



* @param response
响应对象

* @param data
响应数据

* @param connectionError
错误信息

*

* @return

*/
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError) {





//Block内部获得的Data是完整的

if (connectionError) {



NSLog(@"%@", connectionError);


}else{



NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0 error:nil];



NSLog(@"%@", dic);
}








}];














}

#pragma mark 改变背景颜色

- (IBAction)changeBackgroundColor:(id)sender{





self.view.backgroundColor = [UIColor
orangeColor];




}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: