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

UI-GET/POST的同步异步网络请求

2014-07-11 07:15 281 查看
网络请求

HTTP协议的常见请求方式

(1) 同步GET

NSLog(@"同步GET方法实现");

//目的:获取网络的图片,加载到imageView上

NSString * str =
@"http://pic.dbmeizi.com/pics/53516441/s_p13539843.jpg";

//创建一个请求

NSURL * url = [NSURL
URLWithString:str];

//请求对象

NSMutableURLRequest * request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];

//根据请求方式不同
根据这个请求给定不同的请求方法

//一般在ios中
使用"GET"或者"POST"
[request
setHTTPMethod:@"GET"];

//2.连接服务器
请求数据

//连接服务器的方式又两种
同步
异步

//会导致界面的卡死,(主线程阻塞)

//异步链接
不会导致卡死......

NSURLResponse * res =
nil;

NSError * error =
nil;

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

NSLog(@"========%@",res);

//3.上述方法执行完毕 data中肯定有获得的数据

if (data !=
nil) {

UIImage * image = [UIImage
imageWithData:data];//将数据流的(NSData)转换为
图片对象

self.myImageView.image
= image;

}

(2)
#warning 同步POST方法实现
- (void)tongBuPOST:(UIButton*)button
{

NSLog(@"同步POST方法实现");

NSString * str =
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";

NSURL * url = [NSURL
URLWithString:str];

NSMutableURLRequest * request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.f];

[request
setHTTPMethod:@"POST"];

//给post请求需要设置一个body

//post的body
必须是一个NSData对象

NSString * bodyStr =
@"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";

NSData * bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];

[request
setHTTPBody:bodyData];

//2.链接服务器

NSURLResponse * res =
nil;

NSError * error =
nil;

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

//3.对服务器做一些奇奇怪该的事(转换为照片(UIImage)

文字(NSString) )

if (data !=
nil) {

NSString * result = [[NSString
alloc]
initWithData:data
encoding:NSUTF8StringEncoding];

NSLog(@"%@",result);
[result
release];
}

}

(3)#warning 异步GET方法实现
- (void)yiBuGET:(UIButton*)button
{

NSLog(@"
异步GET方法实现");

//1.生成一个请求对象

NSString * str =
@"http://pic.dbmeizi.com/pics/lydiababy/s_p13538415.jpg";

NSURL * url = [NSURL
URLWithString:str];

NSMutableURLRequest * request = [NSMutableURLRequest
requestWithURL: url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];

[request
setHTTPMethod:@"GET"];

//2.链接服务器
异步链接

//如果缓存里面又东西了
就会每个代理方法走一次 需要签署NSURLConnectionDataDelegate
协议

[NSURLConnection
connectionWithRequest:request
delegate:self];

}

//1.到相应的httpheader
- (void)connection:(NSURLConnection
*)connection didReceiveResponse:(NSURLResponse *)response
{

NSLog(@"%s",__FUNCTION__);

self.receiveData
= [NSMutableData
data];

}

//2.接收数据
整个的数据分成很多分
发送
需要我们自己来拼接
- (void)connection:(NSURLConnection
*)connection didReceiveData:(NSData *)data
{

NSLog(@"%s",__FUNCTION__);

//每次接收到服务器传来的小块data
都把他们拼接到receiveData之后
[self.receiveData
appendData:data];

}

//3.数据接收完毕
- (void)connectionDidFinishLoading:(NSURLConnection
*)connection
{

//当执行这个方法时
意味着receiveData中已经是一个完整的数据

//可以直接使用了

NSLog(@"%s",__FUNCTION__);

UIImage * image = [UIImage
imageWithData:self.receiveData];

self.myImageView.image
= image;

}

*****************最重要的最常用的异步实现方法******************

(4)#warning 异步POST方法实现
- (void)yiBuPOST:(UIButton*)button
{

NSLog(@"
异步POST方法实现");

NSString * str =
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";

NSURL * url = [NSURL
URLWithString:str];

NSMutableURLRequest * request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0] ;

[request setHTTPMethod:@"POST"];//设置请求方式
GET POST

NSString * bodyStr =
@"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";

//设置post请求的body数据

NSData * bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];
[request
setHTTPBody:bodyData];

//2.链接服务器
链接方式:异步
同步

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

//在这个块语法中
上面的response data connectionError
都是可以使用的方法 data
是已经请求完毕的数据

NSString * result = [[NSString
alloc]
initWithData:data
encoding:NSUTF8StringEncoding];

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