网络编程

作者: 胡胡LoL | 来源:发表于2017-03-25 21:18 被阅读128次

    网络编程

    1.系统架构

    C/S客户端与服务器 ,B/S浏览器与服务器
    服务器端的开发语言:java,.net,c/c++,php(小中型),python,ruby
    服务器:分内网和外网服务器.内网比较快一点,一般用于测试

    2.HTTP协议:客户端去请求,服务器端响应(短链接,请求完就关闭)

    请求方式:POST请求(相对来说安全一点){提交,如用户登录等},GET请求{索取数据}.
    

    HTTP请求 GET请求没有请求体
    1.先发送一个请求数据包(里面有一个URL:资源定位符),(请求数据包分为①.请求头--一般都为键值对,②.请求体(不是必须的)---放大量的数据)
    GET请求可以在URL后面拼接例如:www.baidu.com?userName= www&password=sss
    拼接数据:?后面接参数count=5&..... &拼接多个参数
    HTTP响应
    2.响应数据包,分为响应头,响应体放在具体内容里面
    GET请求放在URL后面
    POST请求放在请求体里面
    请求头放的一些信息,一般?后面是请求参数

    3.iOS里面的请求

    1.同步请求
    数据的请求过程是在主线程执行的,网络数据阐述的过程会岛主主线程堵塞
    2.异步请求
    数据的请求过程在多线程执行,保存主线程的流畅性
    UI界面的渲染与刷新在主线中执行,主线程不流畅会导致UI界面卡顿

    网络请求的过程

    1.构造NSURL实例(链接地址)
    2.构造NSURLRequest请求
    (可选)构造NSURLSessionConfiguration
    3.构造NSURLSession发送请求
    连接网络是要在plist文件中添加App Transport Security setting +Allow Arbitrary Loads

    //1.构造URL对象
        NSURL *url=[NSURL URLWithString:@"http://api.douban.com/v2/movie/top250"];
        
        //2.构造URLRequest(不可变的对象 ),创建完成后,默认为GET请求,无法设置请求体,请求头
        NSURLRequest *request=[NSURLRequest requestWithURL:url];
        
        /*
         创建可变的URL请求对象,可以设置请求头,请求体,设置请求方式NSMutableURLRequest;
         NSMutableURLRequest *request2=[NSMutableURLRequest requestWithURL:url];
         //设置超时时间(请求超时)
         request.timeoutInterval=30;
         设置请求方式
         request2.HTTPMethod=@"GET";
         设置请求头
         [request2 setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
         */
        
        //3.构造NSURLSession 发送网络请求
        NSURLSession *session=[NSURLSession sharedSession];
        
        //4.发起网络请求(相当于创建网络任务)
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            
            //此block是当数据加载完成之后调用的,并且是由多线程调用的,
            //data是服务器返回的响应体里面的数据
            NSLog(@"%@",[NSThread currentThread]);
            
            //解析json数据
            NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        }];
        //5.发起网络请求
        [task resume];
    
    

    POST请求

    //先构造URL

        //1.构造URL
        NSURL *url=[NSURL URLWithString:@"https://api.weibo.com/2/statuses/update.json"];
        //2.构造请求对象
        NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
        //设置请求方式
        request.HTTPMethod=@"POST";
        NSString *str=@"access_token=2.00XZpRbF0ycGWC7005e48da8wutC3B&status=呵呵";
        
        NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
        //设置请求体
        request.HTTPBody=data;
        //创建网络会话对象
        NSURLSession *session=[NSURLSession sharedSession];
        //创建网络任务
        NSURLSessionDataTask *task=[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            
            /*
             NSURLResponse:存放相应头信息
             data:响应体信息
             */
            NSHTTPURLResponse *httpRes=(NSHTTPURLResponse *)response;
            //获取到相应头
            NSLog(@"%@",httpRes.allHeaderFields);
            
            
            if (error) {
                NSLog(@"发送失败");
            }else {
                NSLog(@"发送成功");
            }
            
        }];
        //发起网络请求
        [task resume];
    

    网络任务(task)

    一个Session可以发起的多个网络请求任务(Task) Session是在iOS7以后使用
    1.数据任务:数据任务擅长处理且频繁的应用程序与服务器之间的请求,例如:请求json数据因为数据任务不会将数据存储到磁盘文件中,所以不支持后台Session
    2.下载任务:以文件的形式接受数据,可以在程序没有运行时后台下载
    3.上传任务:以文件的形式发送数据,可以在程序没有运行时就行后台上传

    将临时文件转存在其他位置

    //1.创建保存地址
    NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/song.mp3"];
        
    //2.创建文件管理
    NSFileManager *manager=[NSFileManager defaultManager];
        
    //3.转存路径,将临时文件转存在创建的文件地址下
    [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:filePath] error:nil];
    

    相关文章

      网友评论

        本文标题:网络编程

        本文链接:https://www.haomeiwen.com/subject/qqxhottx.html