zoukankan      html  css  js  c++  java
  • 自荐亲自写的一套http訪问类库推荐给大家使用。

    本人在开发过程中,由于各种原因。

    自己开发了一套HTTP訪问工具。该工具借监了眼下大家都使和的ASI类库。个人感认为ASI里面太多的控制及逻辑变量都写在同一个类中。没有非常好的规划好。同一时候可能是由于多个人的改动,使得ASI不同的版本号出现了不同的兼容方式。

    同一时候也不可避免的增辑了对该代码的维护。

    出于本人的开发经验自己写了一套这种类库,基本上与ASI的功能上差不太多,可是对存在的未知BUG及使用过程中出现的问题,也希望各读者在使用时将BUG反馈给我,以便修正。

    同一时候我把这套原码放在我的GITHUB上。供大家使用。希望大家多多支持我。

    GITHUB地址:https://github.com/fengsh998/WebRequestComponent

    最新改动已支持block回调。


    该类库使用简单。代码通俗易懂。使用OOP进行划分。使得结构更加清晰,更易维护。


    类库的类结构图:


    类关系图:


    类库的执行原理图:



    类库说明: 

    1.        使用GCD线程管理,使用异步请求方式(暂不支持同步请求)。

    2.        支持SSL,proxy(http,socket5),cookie。

    3.        支持http断点续传(下载)。支持上传、下载进度回调。

    4.        支持队列请求。并发请求,组请求。

    5.        支持常见http请求,(POST,GET,DELETE,PUT)

    6.        支持重定向。

    7.        支持GZIP请求。

    类库为非ARC模式。

    类库支持环境:

    IOS:

               Xcode 4.6以上。

    Mac 10.8.5  xcode5.0以上。仅仅支持64位编译。32位机的没有做适配。所以低版本号的XC编译会有问题。

    类库依赖:

    依赖:

        ios :UIKit.framework,mobileCoreServices.framework

        mac :systemConfiguration.framework,cocoa.framework,appkit.framework

    sdk依赖(ios,mac共同依赖):CFNewwork.framework,libz.dylib,Foundation.framework

    类库的代理说明:

    @protocolFQWebRequestDelegate <NSObject>

    @optional

    - (void)requestStarted:(FQWebRequest *)request;

    - (void)requestFinished:(FQWebRequest *)request;

    - (void)requestFailed:(FQWebRequest *)request;

    /*

        当前请求须要证书认证时

        字点中使用的Key

        FQWebAuthenticationUsername

        FQWebAuthenticationPassword

     */

    - (NSDictionary*)authenticationNeededForRequest:(FQWebRequest *)request;

    - (NSDictionary*)proxyAuthenticationNeededForRequest:(FQWebRequest *)request;

     

    /*

        该站点的安全证书不受信任!此时提示仍然继续还是返回安全连接

        假设返回True,则使用不安全连接继续訪问,FALSE则此次訪问失败

     */

    - (BOOL)isContinueWhenUnsafeConnectInCureentRequest:(FQWebRequest *)request;

     

    /*

        接收到的进度

     */

    - (void)requestReceviceProgress:(FQWebRequest *)request

                      withTotalSize:(FQULLInteger) total withRecvicedSize:(FQULLInteger)size;

    /*

        发送进度

     */

    - (void)requestSendProgress:(FQWebRequest *)request

                      withTotalSize:(FQULLInteger) total withSendSize:(FQULLInteger)size;

     

    @end

     

     

    @protocolFQWebRequestProgressDelegate <FQWebRequestDelegate>

    @optional

    /*

         当有数据下发时会触发

     */

    - (void)downloadProgress:(FQWebRequest *)request

               withTotalSize:(FQULLInteger) total

            withRecvicedSize:(FQULLInteger)size;

     

    /*

         当有post数据时会触发

     */

    - (void)uploadProgress:(FQWebRequest *)request

             withTotalSize:(FQULLInteger) total

            withUploadsize:(FQULLInteger)size;

     

    @end

     

    @protocol FQWebRequestInGroupDelegate<NSObject>

    @optional

    - (void)allRequestFinish:(FQWebGroupRequest *)groupRequest;

     

    @end

    眼下仅仅支持使用delegate进行回调,暂不支持block和SEL的形式进行回调。

    POST 例子:

        FQWebRequest *test22 =[FQWebRequestrequestWithURL:@"http://nanjing.baixing.com/oz/login/x"];

        NSMutableDictionary *items = [NSMutableDictionarydictionaryWithObjectsAndKeys:@"keep-alive",@"Connection",

                                      @"*/*",@"Accept",

                                      @"gzip,deflate",@"Accept-Encoding",

                                      @"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

                                      @"application/x-www-form-urlencoded",@"Content-Type",

                                      nil];

     

        NSString *pd = @"identity=fengsh998&password=13870021792&token=a86d0f446368b94e97f83b309d8cb303";

        NSData *data = [pd dataUsingEncoding:NSUTF8StringEncoding];

        [test22 setPostData:[NSMutableDatadataWithData:data]];

        test22.delegate = self;

        [test22.requestHeader setRequestHeaderByDictionary:items];

        [test22 setRequestMethod:requestUsePost];

       [test22 go];

    GET 例子:

        NSMutableDictionary *items = [NSMutableDictionarydictionaryWithObjectsAndKeys:@"keep-alive",@"Connection",

                                      @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

                                      @"gzip,deflate",@"Accept-Encoding",

                                      //@"gzip",@"Accept-Encoding",

                                      @"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

                                      nil];

       

       

        FQWebRequest *test1 =[FQWebRequestrequestWithURL:@"http://www.google.com.hk"];

       

        [test1.requestHeader setRequestHeaderByDictionary:items];

        [test1 setRequestMethod:requestUseGet];

        //test1.autoSaveUseCookies=YES;

       [test1 go];

    类点下载例子:

    weq = [FQDownLoadRequestrequestWithURL:@"http://a.tgbus.com/download/33747/1"];

        NSMutableDictionary *items = [NSMutableDictionarydictionaryWithObjectsAndKeys:

                                      @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

                                      @"gzip,deflate,sdch",@"Accept-Encoding",

                                      @"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

                                      //@"keep-alive",@"Connection",

                                      //@"User-Agent",@"Mozilla/5.0 (Macintosh;Intel Mac OS X 10_8_5)",

                                      //@"",@"",

                                      nil];

       

        [weq setDownloadStorePath:@"/Users/apple/Desktop/FQDownload"];

      

        [weq.requestHeadersetRequestHeaderByDictionary:items];

        //[weq setRequestMethod:requestUseGet];

        weq.delegate =self;

        FQWebProxySettings *proxy = [[FQWebProxySettingsalloc]init];

        //weq.proxySettings = proxy;

        [proxy release];

        //weq.proxySettings.proxyHost =@"211.138.121.38";

        //weq.proxySettings.proxyPort = 81;

        //weq.proxySettings.proxyType = wpProxyHttp;

        //weq.useCustomSaveFileName = @"aa.apk";

        [weq setReDownloadFile:@"银行大劫案BankJob.apk.FQDownload" useResume:YES];

        [weq go];

    POST FORM表单上传例子:

    FQUploadRequest *rq = [FQUploadRequestrequestWithURL:@"http://www.mftp.info/upload.php"];

        NSMutableDictionary *items = [NSMutableDictionarydictionaryWithObjectsAndKeys:@"keep-alive",@"Connection",

                                      @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

                                      @"gzip,deflate",@"Accept-Encoding",

                                      @"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

                                      @"application/x-www-form-urlencoded",@"Content-Type",

                                      nil];

       

        [rq.requestHeader setRequestHeaderByDictionary:items];

       

        FormDataPackage *dp = [[FormDataPackagealloc]init];

        MimePart *filepart = [[MimePartalloc]init];

        [filepart addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="MAX_FILE_SIZE""];

        filepart.bodystring = @"1000000";

       

        MimePart *filepart1 = [[MimePartalloc]init];

        [filepart1 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="uploadimg"; filename="银行大劫案BankJob.apk""];

        [filepart1 addMimeHeader:@"Content-Type"withValue:@"application/octet-stream"];

       

        NSMutableData *md = [NSMutableDatadataWithContentsOfFile:@"/Users/apple/Desktop/FQDownload/银行大劫案BankJob.apk.FQDownload"];

        filepart1.bodyFileData = md;

       

       

        [dp addMultiPart:filepart];

        [dp addMultiPart:filepart1];

       

        dp.postBodyType = postformMultipartData;

       

        //NSData *dt = [dpbuildMultipartFormDataPostBody];

       

        //[rq setRequestMethod:requestUsePost];

        //[rq.requestHeadersetRequestHeader:@"Content-Type" value:dp.contentTypeValue];

     

       

        rq.delegate = self;

        //[rq setPostData:[NSMutableDatadataWithData:dt]];

        //[rqsetPostBodyFromFile:@"/Users/apple/Desktop/FQDownload/银行大劫案BankJob.apk.FQDownload"];

       

        [rq setuploadFormData:dp];

        [rq go];

    对于multi表单类型的form:

    FQUploadRequest *rq = [FQUploadRequestrequestWithURL:@"http://www.dumpt.com/img/upload.php"];

        NSMutableDictionary *items = [NSMutableDictionarydictionaryWithObjectsAndKeys:@"keep-aflive",@"Connection",

                                      @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

                                      @"gzip,deflate",@"Accept-Encoding",

                                      @"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

                                      @"application/x-www-form-urlencoded",@"Content-Type",

                                      nil];

       

        [rq.requestHeader setRequestHeaderByDictionary:items];

       

        FormDataPackage *dp = [[FormDataPackagealloc]init];

        dp.postBodyType = postformMultipartData;

       

        MimePart *filepart = [[MimePartalloc]init];

        [filepart addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="type""];

        filepart.bodystring = @"direct";

       

        MimePart *filepart1 = [[MimePartalloc]init];

        [filepart1 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="userfile[]"; filename="2.png""];

        [filepart1 addMimeHeader:@"Content-Type"withValue:@"image/png"];

       

        NSMutableData *md = [NSMutableDatadataWithContentsOfFile:@"/Users/apple/Desktop/2.png"];

        filepart1.bodyFileData = md;

       

        MimePart *filepart2 = [[MimePartalloc]init];

        [filepart2 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="userfile[]"; filename="""];

        [filepart2 addMimeHeader:@"Content-Type"withValue:@"application/octet-stream"];

       

        MimePart *filepart3 = [[MimePartalloc]init];

        [filepart3 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="userfile[]"; filename="""];

        [filepart3 addMimeHeader:@"Content-Type"withValue:@"application/octet-stream"];

       

       

        MimePart *filepart4 = [[MimePartalloc]init];

        [filepart4 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="userfile[]"; filename="""];

        [filepart4 addMimeHeader:@"Content-Type"withValue:@"application/octet-stream"];

       

       

        MimePart *filepart5 = [[MimePartalloc]init];

        [filepart5 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="userfile[]"; filename="""];

        [filepart5 addMimeHeader:@"Content-Type"withValue:@"application/octet-stream"];

       

        MimePart *filepart6 = [[MimePartalloc]init];

        [filepart6 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="x""];

        filepart6.bodystring = @"64";

       

        MimePart *filepart7 = [[MimePartalloc]init];

        [filepart7 addMimeHeader:@"Content-Disposition"withValue:@"form-data;name="y""];

        filepart7.bodystring = @"13";

       

        [dp addMultiPart:filepart];

        [dp addMultiPart:filepart1];

        [dp addMultiPart:filepart2];

        [dp addMultiPart:filepart3];

        [dp addMultiPart:filepart4];

        [dp addMultiPart:filepart5];

        [dp addMultiPart:filepart6];

        [dp addMultiPart:filepart7];

       

        [rq  setuploadFormData:dp];

     

        rq.delegate = self;

        [rqgo];


  • 相关阅读:
    线段树 BZOJ1858 [Scoi2010]序列操作
    dfs序+线段树 BZOJ3252 攻略
    线段树 BZOJ3888 [Usaco2015 Jan]Stampede
    线段树 BZOJ1798 [Ahoi2009]Seq 维护序列seq
    大坑【持续更新……】
    LCA树剖法模板
    Tarjan-LCA HDU2586 How far away ?
    动态规划 洛谷P2401 不等数列
    搜索 洛谷P2530 [SHOI2001]化工厂装箱员
    动态规划 洛谷P1077 摆花
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10826972.html
Copyright © 2011-2022 走看看