一.同步连接下的GET请求:
//第一步:创建网址对象
NSURL * url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
//第二步:创建网络请求对象
NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
//第三步:创建连接对象,发送请求
NSURLResponse * response = nil;
NSError * error = nil;
//返回的是NSData类型的数据
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//解析JSON数据第一种方式
NSMutableDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dic);
NSLog(@"123");
NSString * string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//解析JSON数据第二种方式:(使用第三方JSONKit)
NSDictionary *dic = [data objectFromJSONData];
//将字典转换成NSString形式
NSString * string = [dic JSONString];
NSLog(@"%@",string);
self.dataTextView.text = string;
二.异步连接下的GET请求:(异步连接,必须通过协议方式处理请求过来的数据,所以需要遵守两个协议:<NSURLConnectionDelegate,NSURLConnectionDataDelegate>)
//第一步:创建网址对象
NSURL * url = [NSURL URLWithString:BaseUrl];
//第二步:创建网络请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
//第三步:创建异步连接,并发送请求
self.connection =[NSURLConnection connectionWithRequest:request delegate:self];//声明个属性,因为下面的协议方法中需要取消连接(手动)
实现代理方法:
//1.将要发送请求
-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
{
NSLog(@"request = %@",request);
return request;
}
//2.服务器已经响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//获取文件总长度
_value = response.expectedContentLength;
//给_recieveData开辟空间
_recieveData = [[NSMutableData alloc]init];
NSLog(@"response = %@",response);
}
//3.已经开始接收数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//进行拼接
[_recieveData appendData:data];//必须是可变的data
NSLog(@"%ld",[_recieveData length]);//输出拼接后长度
//将每次拼接得到的数据除以总数据的大小
self.progressVIew.progress = 1.0*[_recieveData length]/_value;//注意需要乘以1.0
NSLog(@"data = %@",data);
}
//4.数据传输(发送/接收)结束
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"*******%@",connection);
[connection cancel];
}
//5.传输数据失败
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"失败原因:%@",error);
}
三.同步下的POST请求:(使用了第三方JSONKit)
//1.创建网址对象
NSURL *url = [NSURL URLWithString:BASE_URL_2];
//2.创建请求对象(创建可变的,因为后面要设置request中的属性值)
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
//3.设置请求方式(如果没设置,默认是GET请求)
[request setHTTPMethod:@"POST"];
#warning mark------NSString与NSData类型之间的转换非常非常重要,必须要掌握
#pragma mark-----NSString转换为NSData
NSData * data = [BASE_URL_2_PARAM dataUsingEncoding:NSUTF8StringEncoding];
#pragma mark-----NSData转换成NSString
// NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//4.设置请求体
[request setHTTPBody:data];
//5.创建连接对象,并发送请求
NSData * data1 = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//解析数据
NSMutableDictionary * dic = [NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableContainers error:nil];
NSString * string = [dic JSONString];
self.dataTextView.text = string;
四.异步连接下的POST请求:(同样需要遵守上面提到的两个协议:<NSURLConnectionDelegate,NSURLConnectionDataDelegate>)
//1.创建网址对象
NSURL *url = [NSURL URLWithString:BASE_URL_2];
//2.请求对象
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
//①.设置请求方式
[request setHTTPMethod:@"POST"];
//②.设置请求体
NSData *data = [BASE_URL_2_PARAM dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//3.创建异步连接对象,并发送请求
#pragma mark ------第一种方式:(通过协议的方式,处理请求数据)
// [NSURLConnection connectionWithRequest:request delegate:self];
#pragma mark ------第二种方式:(block方式)
//调取系统队列
NSOperationQueue * mainQueue = [NSOperationQueue mainQueue];
//防止内存泄露
__block SecondViewController *secondVC = self;
[NSURLConnection sendAsynchronousRequest:request queue:mainQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//此方法中data是获得的最后的data,相对于协议方法,协议可以获得每一步中的data
NSMutableDictionary *dic = [data objectFromJSONData];
secondVC.dataTextView.text = [dic JSONString];
}];
实现协议方法:
//1.将要发送请求
-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
{
return request;
}
//2.服务器已经响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//开辟空间
_recieveData = [[NSMutableData alloc]init];
}
//3.已经开始接收数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//对每次传来的数据进行拼接
[_recieveData appendData:data];
}
//4.接收数据完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//解析最后拼接完成的完整数据
NSMutableDictionary * dic = [_recieveData objectFromJSONData];
self.dataTextView.text = [dic JSONString];
}
//5.传输过程中出现错误:(断网,自动关机,断电....),发生错误时执行
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"error = %@",error);
}