zoukankan      html  css  js  c++  java
  • IOS NSURLRequest(http请求)讲解 ---------赎罪之路

    前言

         很久没有写过博客了,今天终于可以抽空写。公司的项目从2016年03月15日(我第二份工作任职)开始,辛苦了3个多月终于接近尾声了,在这当中我学了非常多东西,为了遗忘我就写个博客来记录下,以防止忘记。

    正文  

         今天要讲的主角是NSURLRequest。这里我先采用apple 官方文档解释

    NSURLRequest objects represent a URL load request in a manner independent of protocol and URL scheme,

    NSURLRequest encapsulates two basic data elements of a load request: the URL to load, and the policy to use when consulting the URL content cache made available by the implementation.

    NSURLRequest is designed to be extended to support additional protocols by adding categories that provide accessor methods for your own protocol-specific properties. Those methods can get and set the actual values by calling the NSURLProtocol methods propertyForKey:inRequest: and setProperty:forKey:inRequest:.

    以上引用苹果官方解释,大概就是NSURLRequest 是一个独立的独立加载请求的协议和解决方案,它封装了 load URL 和 the policy,当你发送了网络请求时候可以使用缓存,你可以通过它 propertyForKey:inRequest: 和 setProperty:forKey:inRequest:.这两个方法添加你的协议,英语笔记差,翻译不正确请指出。

     

       其实苹果说了这多,说白就是这个是可以让你发送网络请求,你可以为这个类添加缓存,使得相同的URL不必在进行一次网络请求,缓存到后面我们慢慢再谈论,因为今天的主角是NSURLRequest。

     

    例子一

        //1 需要请求的URL

        NSString *imageUrl = @"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1467208812&di=3b6365a0a40959e9b1f9432372bc1ee3&src=http://img5.duitang.com/uploads/item/201208/13/20120813000951_iF2K4.thumb.700_0.jpeg";

        

        //2 NSString 封装成 NSURL

        NSURL *url = [NSURL URLWithString:imageUrl];

        

        //3 定义NSURLRequest 对象

        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];

        

        //4 发送请求

        

        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

            

            if(!connectionError){

                

                NSLog(@"加载成功");

                

                dispatch_async(dispatch_get_main_queue(), ^{

                    

                    //加载Image

                    

                    UIImage *image = [UIImage imageWithData:data];

                    

                    //显示到UIImageView

                    self.imageView.image = image;

                });

                

            }

            else

                NSLog(@"加载失败");

        }];

    第一个例子非常简单,主要是引入门。大家可能会奇怪,为什么我没有设置请求的类型(get 或者 post),因为NSURLReqest 默认是GET请求,所以我才没有设置而没有提示错误。

    例子二(post请求)

        // 1 需要请求的URL String
        NSString *urlString = @"http://fmonline.server.kugou.net:8080/get_online";
        
        // 2 封装成NSURL
        NSURL *url          = [NSURL URLWithString:urlString];
        
        // 3 定义NSURLRquest
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];//注意这个是mutable,说明这个是可变的
        
        // 4设置对应的属性
        
        // 设置请求类型
        request.HTTPMethod   = @"post";//默认是 get

          //添加url

            request.URL          = url;

        //设置body内容
        NSString *bodyString = @"¼r¹}9:";
        NSData   *bodyData   = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
        request.HTTPBody     = bodyData;
        
        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            
        }];
    

       post请求一般都是采用NSMutableURLRequest 进行网络请求,因为post请求一般包括 body 参数 或者 head。

    简单的两个例子初步学习IOS 如何进行网络请求

    重点

    在ios 9 即(xcode7)需要在info.plist

    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAppTransportSecurity</key>
    <true/>

    因为 iOS 9 就停用了http请求,默认采用https,但是目前没有多少公司采用了https请求,因为要多支出费用。

    结言

    NSURLRequest 目前暂时先讲到这里,下次我们来讲NSURLConnect。

    demo 下载地址 https://github.com/YeYanHong/NSURLReqest-Demo

  • 相关阅读:
    MongoDB数据导入hbase + 代码
    Hbase批量插入优化记录
    net.sf.fjep.fatjar_0.0.32 eclipse4.x 可以用的jar包
    %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91
    学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码
    《Python生物信息学数据管理》中文PDF+英文PDF+代码
    推荐《R数据可视化手册》高清英文版PDF+中文版PDF+源代码
    学习优化《机器学习与优化》中文PDF+英文PDF
    入门python:《Python编程从入门到实践》中文PDF+英文PDF+代码学习
    推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案
  • 原文地址:https://www.cnblogs.com/HeiNeiKu/p/5628498.html
Copyright © 2011-2022 走看看