ASIHTTPHRequest怎么开始与结束的 asihttprequest ios7

这里记录了IOS源码ASIHttpRequest发起一个HTTP请求的大体过程,可能有不对的地方。用了很久,没有了解过原理,为了了解ASI与http本身看了它的源码,记录一下整个请求过程的流水帐。
在看ASI源码之前,关于HTTP我唯一知道的是这个名字,他有几种调用的方法,GET,POST,DELETE等,会有一些特定意义的返回结果,如404等,然后是它的应用场景,但是关于它的具体技术详情,我还一无所知。如果你跟我一样,就接着看吧,如果你对HTTP已经了解很多,就略过算了,这是我对自己的记录。

按照ASI的文档,你应该可以很轻易的创建并使用ASIHttpRequest发起一个请求,并获取它的返回结果。
ASIHttpRequest是NSOperation的子类,所以可以你需要知道NSOperation的一些基本特性,这对于理解ASIHttpREquest的异步处理会有很大帮助。这里只通过ASI请求的发起到结束来了解一下Http这个互谅网协议(只是从感性上的认知)。
ASI使用方法startSynchronous发起同步请求,真是有效的操作是在main函数中,startSynchronous里面其他的操作是设置一些属性,执行main函数,并等待返回,还有一些同步操作。重点看main函数。

知识点一:后台任务执行(这部分跟http无关)关于后台运行,在main函数的第一部分涉及到的内容是判断设备与系统版本,检查对后台多任务的支持,并在支持的情况下使用后台任务执行尚未完成的网络请求。这里需要注意的是使用一个函数beginBackgroundTaskWithExpirationHandler:来标识执行后台任务开始(意思是从这里开始的任务,如果app进入后台,会在设备与系统支持的情况下在后台执行);在网络操作结束的时候,调用对应的函数endBackgroundTask:标识需要后台执行的任务操作到这里结束。在此之间的所有操作,如果在app执行的过程中没有完成会在app进入后台继续执行。

知识点二:设置请求的body分为两种情况:一种是从一个文件内容作为body发送请求,这时在使用文件内容之前将对文件的操作结束掉,然后根据配置(是否进行内容压缩)决定使用压缩后的新的眼所文件作为发送内容还是直接使用这个文件本身作为发送内容。如果使用压缩,则会直接进行压缩,然后将压缩后的文件作为新的发送文件路径。
第二种是从内存中(postBody属性)获取postBody,并同样根据一中所属决定是否压缩,如果压缩就将压缩后的内容作为新的postBody
经过上述处理,如果有post内容,就将http请求的方法修改为POST,同时在requestHeader中设置Content-Length为post内容的长度,否则就使用默认的方法。
知识点四:创建requestHeader1.关于cookies:cookies可能已经保存,先将保存的或者全局的cookies跟当前request的cookies合并,将所有的cookies按照name和valuestring方式合成一个string,以@“Cookie”作为key加入requestHeader。2.User-Agent:该信息可以标识请求者的一些信息,如什么浏览器类型和版本、操作系统,使用语言等信息。,要么使用用户设置的要么使用默认的(使用一些方法从系统获取的,包括app信息,系统版本,系统硬件等一些信息);3.压缩:@"Accept-Encoding"标识接受信息的编码,如果支持压缩就标识为@"gzip",@"Content-Encoding"标识请求内容的编码,如果压缩也使用@“gzip”。4.下载相关:HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,Content-Range用于响应头
5.上面是并行的(只会是一种情况),之后如果可以使用保存的session信息,就在其中寻找证书,并判断它的有效性,如果失效就删除它


知识点五:设置Authorization获取用户授权信息,比如用户名,密码,或者其他的授权方式。分为几种形式:在设置好的requestHeader中如果没有这些信息,就进行设置:1.如果有用户名和密码且授权方式是kCFHTTPAuthenticationSchemeBasic,就使用用户名密码进行基本授权2.如果可以使用保存的session授权信息,且保存的信息中存在授权信息,就使用这些信息进行授权,如果授权失败,就从保存信息中把相关信息删除3.如果session中没有授权信息,就从中找授权证书,并从中提取授权信息
知识点六:四五设置的都在请求的头里面,设置好之后将请求头按keyvalue分别调用方法CFHTTPMessageSetHeaderFieldValue添加到request中
知识点六:配置Proxy包括PAC文件,proxyHost,poxyPort,三者同时存在说明已经设置了代理,否则需要设置代理1。如果设置了自动代理的url,就获取这个文件,之后进行操作,然后直接返回。2.否则使用CFNetworkCopyProxiesForURL获取代理信息(其实就是获取PAC文件路径,然后加载PAC文件)3。如果上面2没有获取到代理信息,请求就返回失败,如果获取到了代理信息,先设置host与port和type4。获取PAC文件内容并保存好之后会直接开始进行请求
知识点七:发起请求准备首先清空请求返回结果信息字段如果使用文件作为postBody,设置readStream为ASIInputStream(使用post文件或者压缩文件/或者内存中的postBody数据或者这些数据的压缩进行初始化),
SSL:1.如果请求打头是HTTPS://,则需要设置SSL,ASISSL如果失效就设置sslProperties的kCFStreamSSLValidatesCertificateChain字段为false,2.如果被设置为使用用户证书,将用户设置的证书Array以kCFStreamSSLCertificates作为key加入sslProperties3.使用CFReadStreamSetProperty设置readStream的ssl读取信息
根据之前的设置,组装并设置代理关闭过期的请求与connection尝试使用已经存在的没有过期的connection

知识点八:发起请求CFReadStreamSetClient设置readStream(设置回调)CFReadStreamOpen打开readStream创建一个time进行状态更新,更新方法主要是更新传输数据实时信息与判断是否请求过期将这个time加入runloop在readStream回调中处理各种网络信息

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/194869.html

更多阅读

港货与行货的区别 港版和国行怎么分辨

港货与行货的区别——简介港货和行货通常代表从不同销售渠道进入大陆的电子产品,下面简单和大家分享港货和行货的区别。港货与行货的区别——工具/原料聪明的你港货与行货的区别——方法/步骤港货与行货的区别 1、

甜角怎么吃?甜角的功效与作用 泰国甜角功效

甜角怎么吃?甜角的功效与作用——简介甜角又称罗望子、“木罕”(傣语),一种外表长的像花生内心像干桂圆的特产,是云南省低热的河谷地区特产的热带果实,有两个类型:甜型和酸型。甜角怎么吃?甜角的功效与作用——甜角的简介

dnf智慧与金钱的任务怎么做 精 金钱与智慧漫画

dnf智慧与金钱的任务怎么做 精——简介 《地下城与勇士》是一款韩国网络游戏公司NEOPLE开发的免费角色扮演2D游戏,由三星电子发行,并于2005年8月在韩国正式发布。该游戏是一款2D卷轴式横版格斗过关网络游戏 (MMOACT),大量继承了众多家

声明:《ASIHTTPHRequest怎么开始与结束的 asihttprequest ios7》为网友天国佳人分享!如侵犯到您的合法权益请联系我们删除