iOS 网络基础_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS 网络基础

iOS 网络基础

 2015/4/7 21:17:02  W_LR  程序员俱乐部  我要评论(0)
  • 摘要:iOS网络基础一次HTTP请求的完整过程浏览器/应用发出请求(请求包含HTTP请求(GET,POST),地址URL,协议(HTTP/1.1),请求头部,附加信息)-->Web服务端处理(页面:静态html页面、动态php/asp/jsp页面)-->浏览器/应用GET/POST区别:都是HTTP请求方式GET:只获取数据,所有参数都在URL网址中,用于简单地获取数据(不安全)POST:获取上传附加数据,请求参数在请求头文件
  • 标签: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];   //开启状态监视
}

 

发表评论
用户名: 匿名