`
jsntghf
  • 浏览: 2528539 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ASIHTTPRequest类库的使用

    博客分类:
  • iOS
阅读更多

以前,写了一篇关于服务端请求的文章:IOS中请求服务器端方法,使用的是iOS SDK中的API,调用起来比较繁琐,这篇文章主要是关于通过ASIHTTPRequest类库请求服务端的方法。

 

ASIHTTPRequest是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。

 

ASIHTTPRequest的功能很强大,主要特色如下:

 

通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作

下载的数据,可存储到内存中或直接存储到磁盘中

能上传本地文件到服务端

可以方便的访问和操作请求和返回的Http头信息

可以获取到上传或下载的进度信息,为应用程序提供更好的体验

支持上传或下载队列,并且可获取队列的进度信息

支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain中

支持Cookie

当应用在后台运行时,请求可以继续运行

支持GZIP压缩数据

内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果

ASIWebPageRequest可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView/WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览

支持客户端证书

支持通过代理发起Http请求

支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制

支持断点续传

支持同步和异步请求

 

官网地址:http://allseeing-i.com/ASIHTTPRequest/

 

如果想在iOS项目中使用ASIHTTPRequest,需要在项目中进行简单的配置。

 

1、将ASIHTTPRequest的相关文件加入项目中,所需文件列表如下:

 

ASIHTTPRequestConfig.h

ASIHTTPRequestDelegate.h

ASIProgressDelegate.h

ASICacheDelegate.h

ASIHTTPRequest.h

ASIHTTPRequest.m

ASIDataCompressor.h

ASIDataCompressor.m

ASIDataDecompressor.h

ASIDataDecompressor.m

ASIFormDataRequest.h

ASIInputStream.h

ASIInputStream.m

ASIFormDataRequest.m

ASINetworkQueue.h

ASINetworkQueue.m

ASIDownloadCache.h

ASIDownloadCache.m

ASIAuthenticationDialog.h

ASIAuthenticationDialog.m

Reachability.h

Reachability.m

 

2、将相关的类库加入项目中,列表如下:

 

SystemConfiguration.framework

MobileCoreServices.framework

CoreGraphics.framework

CFNetwork.framework

libxml2.dylib

libz.dylib

 

3、Search Paths中的Header Search Paths设置为:${SDK_DIR}/usr/include/libxml2

 

ASIHTTPRequest有很多功能,所有功能说明都可以在其官方网站的相关文档中查到,本文仅简单介绍一下如何使用ASIHTTPRequest来进行同步Http请求和异步Http请求。

 

在需要使用ASIHTTPRequest的头文件中加入以下代码:

 

#import "ASIHTTPRequest.h"

 

这样就可以在代码中使用ASIHTTPRequest相关的类了。

 

创建一个同步请求

 

这是ASIHTTPRequest最简单的一种使用模式,发送startSynchronous消息后即开始在同一线程中执行HTTP请求,线程将一直等待直到请求结束(请求成功或者失败)。通过检查error属性可以判断请求是否成功或者有错误发生。

要获取返回的文本信息,调用responseString方法。如果下载的是二进制文件,例如图片、MP3,则调用responseData方法,可以得到一个NSData对象。

 

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
    NSString *response = [request responseString];
}
 

创建一个异步请求

 

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];

- (void)requestFinished:(ASIHTTPRequest *)request {
    // 当以文本形式读取返回内容时
    NSString *responseString = [request responseString];
    // 当以二进制形式读取返回内容时
    NSData *responseData = [request responseData];
}

- (void)requestFailed:(ASIHTTPRequest *)request {
    NSString *message = NULL;

    NSError *error = [request error];
    switch ([error code]) {
        case ASIRequestTimedOutErrorType:
            message = kAlertMsgTimeoutError;
            break;
        case ASIConnectionFailureErrorType:
            message = kAlertMsgConnectionFailError;
            break;   
        case ASIAuthenticationErrorType:
            message = kAlertMsgAuthFailError;
            break;   
        case ASITooMuchRedirectionErrorType:
            message = kAlertMsgTooManyRedirect;
            break;   
        case ASIRequestCancelledErrorType:
            message = kAlertMsgReqCancelledError;
            break;   
        case ASIUnableToCreateRequestErrorType:
            message = kAlertMsgUnableCreateReqError;
            break;   
        case ASIInternalErrorWhileBuildingRequestType:
            message = kAlertMsgUnableBuildReqError;
            break;   
        case ASIInternalErrorWhileApplyingCredentialsType:
            message = kAlertMsgUnableApplyCredError;
            break;   
        case ASIFileManagementError:
            message = kAlertMsgFileManageError;
            break;  
        case ASIUnhandledExceptionError:
            message = kAlertMsgUnhandledExcepError;
            break;
        case ASICompressionError:
            message = kAlertMsgCompressionError;
            break;
        default:
            message = kAlertMsgGenericError;
            break;
    }

    if (NULL != message) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:kApplicationTitle
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:kAlertDefaultCancel
                                              otherButtonTitles:nil];
        [alert show];
    } 
}
 
分享到:
评论

相关推荐

    ASIHTTPRequest类库(IOS调用REST)

    ASIHTTPRequest 类库 ASIHTTPRequest功能很强大,主要特色如下: 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作 下载的数据,可存储到内存中或直接存储到磁盘中 能上传本地文件到服务端 可以...

    使用ASIhttprequest类库上传文件到php服务器之iOS客户端方法

    这时ios中的使用asihttp类库上传文件到php服务器,关于php服务器接收文件见我的另一篇文章

    ASIHttpRequest类库

    ASIHttpRequest是一个广泛使用的Objective-C第三方类库,专为iOS和Mac OS X平台设计,用于处理HTTP请求和网络数据传输。这个库由Blake Watters开发,它简化了在苹果的Cocoa环境中进行网络编程的工作,提供了丰富的...

    ASIHttpRequest 类库

    ASIHttpRequest 是一个流行的开源类库,专为 iOS(iPhone)平台设计,用于处理网络请求。这个类库由 Ben Copsey 创建,它简化了在 Objective-C 中进行 HTTP 请求的任务,是 iPhone 开发者进行网络交互时的常用工具。...

    改进版 iOS 网络请求类库ASIHTTPRequest

    在学习和使用 ASIHTTPRequest 时,开发者应该关注其对多线程、错误处理、网络状态检测等方面的处理,这些都是构建可靠网络应用的基础。同时,也要注意,由于 ASIHTTPRequest 已停止维护,可能不兼容最新的 iOS 版本...

    asihttpRequest

    标签“asi”直接指向了ASIHTTPRequest库,这是一个历史悠久且被广泛使用的网络请求框架。尽管现在有了更现代的替代品,如NSURLSession,但ASIHTTPRequest因其简单易用和丰富的特性集,仍有一定的社区支持。 从压缩...

    iOS多线程编程

    本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...

    ASIHttpRequest下载

    ASIHTTPRequest是一个Objective-C类库,用于发送HTTP请求,包括GET、POST、PUT和DELETE等方法。它支持同步和异步请求,可以方便地处理文件上传和下载,并提供了进度回调,以便在应用中实时更新用户界面。 2. **...

    iOS常用第三方类库 - CocoaChina 苹果开发中文站 - 最热的iPhone开发社区 最热的苹果开发社区 最热的iPa

    7. 测试工具:`Testing with Xcode`提供了一套完整的测试策略,包括SpriteKit在iOS8和OSX10.10上的测试,以及Swift语言的使用;`Faux Pas`是一款Xcode插件,用于检测潜在的代码错误。 8. 应用分析:`App Annie`是...

    app上传图片

    在描述中提到的"asi类库"指的是ASIHTTPRequest,这是一个已经比较老的HTTP请求库,但在过去被广泛用于iOS应用的网络通信。 ASIHTTPRequest库虽然已不再维护,但其功能强大,支持异步和同步请求,提供了文件上传和...

    zxing.java源码解析-iOS:iOS开源库

    最近做的不错的一个通讯类库,具有AFNetworking和ASIHTTPRequest双方的优点,甚至功能更丰富一些,但是本人还没有使用过。 下载地址:https://github.com/MugunthKumar/MKNetworkKit Socket 1、CocoaAsyncSocket ...

    AFNetWorkingDemo

    第一点,它有人更新和维护,而且目前使用者很多,第二点,还是使用者很多,那么他的资料,文档,demo就多,很好找遇到问题好解决。如果不用AFNetworking,还有一种MKNetworkKit也不错,不妨一试。1

    校园助手iOS端HutHelper-Open.zip

     └── Pods:项目使用了[CocoaPods](http://code4app.com/article/cocoapods-install-usage)这个类库管理工具  └── json:请求的示例数据请注意,因为使用了Pods,所以请下载完项目后先运行pod install注意...

Global site tag (gtag.js) - Google Analytics