一.同步連接下的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);
}