iOS 網路基礎,ios網路基礎
iOS 網路基礎一次HTTP請求的完整過程
瀏覽器/應用 發出請求(請求包含HTTP請求(GET,POST),地址URL,協議(HTTP/1.1),要求標頭部,附加資訊)
--> Web服務端處理(頁面:靜態html頁面、動態php/asp/jsp頁面) --> 瀏覽器/應用
GET/POST區別:
都是HTTP請求方式
GET:只擷取資料,所有參數都在URL網址中,用於簡單地擷取資料(不安全)
POST:擷取上傳附加資料,請求參數在要求標頭檔案,需傳輸加密資訊
網路請求開源庫AFNetWorking的使用
// [self testGetRequest]; //1.GET請求(html,json,xml) // [self testPostRequest]; //2.POST請求 // [self testUploadFile]; //3.上傳檔案 // [self testDownloadFile]; //4.下載檔案 [self testMonitorNetworkStatus]; //5.監控網路狀態 //6.圖片非同步功能(替代SDWebImage) // UIKit+AFNetworking.h // - (void)setImageWithURL:(NSURL *)url; //7.有些請求特殊的要求標頭 // BAIDU_WISE_UID=wapp_1428385381699_466; //AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //[manager.requestSerializer setValue:@"wapp_1428385381699_466" forHTTPHeaderField:@"BAIDU_WISE_UID"];
1.GET請求
#pragma mark - 1.GET請求-(void)testGetRequest{ NSString *urlStr = @"http://www.baidu.com"; //定義AFHTTPRequest管理對象 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //註:預設情況下,預設資料格式JSON,content-type:JSON ,responseObjectd是解析的字典和數組 //不是產生錯誤Code=-1016 //解決:設定解析器為HTTP形式,下載回來的為NSData manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { //responseObject 重要參數--> 包含下載的資料 NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"str = %@",str); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error %@",error); }];}
2.POST請求
#pragma mark - 2.POST請求-(void)testPostRequest{ //POST介面:http://quiet.local/testdir/login.php //參數1: @"user" : @"quiet" //參數2: @"password" : @"123" NSString *urlString = @"http://quiet.local/testdir/login.php"; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; //參數1: 傳入地址 //參數2: 傳入URL請求的參數, 格式傳入字典//parameters --> 傳進一個字典@{} [manager POST:urlString parameters:@{@"user":@"quiet",@"password":@"123"} success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"str = %@",str); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error %@",error); }]; }
3.圖片上傳
#pragma mark - 3.圖片上傳-(void)testUploadFile{ //POST上傳介面 NSString *urlStr = @"http://quiet.local/uploadtest/upload.php"; //參數名: image : 參數值是圖片 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager POST:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { //實現:上傳的資料附加到請求體中 NSString *path = [[NSBundle mainBundle] pathForResource:@"back2.jpg" ofType:nil]; //mimeType 多用途互連網郵件擴充類型, 每種檔案都有一個類型 --> 直接上網搜格式 [formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"12222" fileName:@"mddse.jpg" mimeType:@"12222/jpeg" error:nil]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"str = %@",str); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error = %@",error); }]; }
4.下載檔案
#pragma mark - 4.下載檔案-(void)testDownloadFile{ NSString *urlString = @"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip"; //建立回話管理器對象(預設配置)AFURLSessionManager *manager AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; // NSURLSessionDownloadTask *task NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { //返迴文件儲存的位置 NSString *path = [NSString stringWithFormat:@"%@/Documents/all.zip",NSHomeDirectory()]; NSLog(@"path = %@",path); return [NSURL fileURLWithPath:path]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { // NSLog(@"下載完成"); }]; // [task resume]; //啟動任務 }
5.監控網路狀態
#pragma mark - 5.監控網路狀態-(void)testMonitorNetworkStatus{ AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]]; // [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { //AFNetworkReachabilityStatusn幾種狀態 NSDictionary *dict =@{@(AFNetworkReachabilityStatusUnknown):@"未知",@(AFNetworkReachabilityStatusNotReachable):@"不可達",@(AFNetworkReachabilityStatusReachableViaWWAN):@"GPRS",@(AFNetworkReachabilityStatusReachableViaWiFi):@"Wifi"}; NSLog(@"狀態為 %@",dict[@(status)]); }]; [manager.reachabilityManager startMonitoring]; //開啟狀態監視}