利用ASIHTTPRequest訪問網絡

ASIHTTPRequest是第三方類庫,ASIHTTPRequest對CFNetwork API進行了封裝。緩存

有以下特色:網絡

 

  • l 經過簡單的接口,便可完成向服務端提交數據和從服務端獲取數據的工做
  • l 下載的數據,可存儲到內存中或直接存儲到磁盤中
  • l 能上傳本地文件到服務端
  • l 能夠方便的訪問和操做請求和返回的Http頭信息
  • l 能夠獲取到上傳或下載的進度信息,爲應用程序提供更好的體驗
  • l 支持上傳或下載隊列,而且可獲取隊列的進度信息
  • l 支持基本、摘要和NTLM身份認證,在同一會話中受權憑證會自動維持,而且能夠存儲在Keychain(Mac和iOS操做系統的密碼管理系統)中
  • l 支持Cookie
  • l 當應用(iOS 4+)在後臺運行時,請求能夠繼續運行
  • l 支持GZIP壓縮數據
  • l 內置的ASIDownloadCache類,能夠緩存請求返回的數據,這樣即便沒有網絡也能夠返回已經緩存的數據結果
  • l ASIWebPageRequest –能夠下載完整的網頁,包括包含的網頁、樣式表、腳本等資源文件,並顯示在UIWebView /WebView中。任意大小的頁面均可以無限期緩存,這樣即便沒有網絡也能夠離線瀏覽
  • l 支持客戶端證書
  • l 支持經過代理髮起Http請求
  • l 支持帶寬限制。在iOS平臺,能夠根據當前網絡狀況來自動決定是否限制帶寬,例如當使用WWAN(GPRS/Edge/3G)網絡時限制,而當使用WIFI時不作任何限制
  • l 支持斷點續傳
  • l 支持同步和異步請求

第1、同步請求:異步

 

 

 ASIHTTPRequest *httpRequest=[ASIHTTPRequest  requestWithURL:url];
       [httpRequest setRequestMethod:@"GET"];
       [httpRequest setTimeOutSeconds:60];
      [httpRequest startSynchronous];
    NSError *error=httpRequest.error;
        if(error==nil)
        {
            NSData *data=httpRequest.responseData;
            UIImage *image=[UIImage imageWithData:data];
            self.image=image;
        }else
        {
           NSLog(@"請求網絡錯誤");
        }


第2、異步請求:
async

 

 

用delegate實現:url

 

-(void)asynchronous:(NSURL*)url
{
    ASIHTTPRequest *httpRequest=[ASIHTTPRequest  requestWithURL:url];
    [httpRequest setRequestMethod:@"GET"];
    [httpRequest setTimeOutSeconds:60];
    
    httpRequest.delegate=self;
    [httpRequest startAsynchronous];

}
#pragma mark - ASIHTTPRequest delegate
- (void)requestFinished:(ASIHTTPRequest *)request
{
    UIImage *image=[UIImage imageWithData:request.responseData];
    self.image=image;
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error=request.error;
    NSLog(@"請求出錯:%@",error);
}


用block實現:
spa

 

 

ASIHTTPRequest *httpRequest=[ASIHTTPRequest  requestWithURL:url];
    [httpRequest setRequestMethod:@"GET"];
    [httpRequest setTimeOutSeconds:60];
    
    //httpRequest.delegate=self;
  [httpRequest setCompletionBlock:^{
        UIImage *image=[UIImage imageWithData:httpRequest.responseData];
        self.image=image; 
  }];
    [httpRequest setFailedBlock:^{
        NSError *error=httpRequest.error;
        NSLog(@"請求出錯:%@",error);

    }];
    [httpRequest startAsynchronous];


Block 回調:
操作系統

 

 

- (void)setStartedBlock:(ASIBasicBlock)aStartedBlock;
- (void)setHeadersReceivedBlock:(ASIHeadersBlock)aReceivedBlock;
- (void)setCompletionBlock:(ASIBasicBlock)aCompletionBlock;
- (void)setFailedBlock:(ASIBasicBlock)aFailedBlock;
- (void)setBytesReceivedBlock:(ASIProgressBlock)aBytesReceivedBlock;
- (void)setBytesSentBlock:(ASIProgressBlock)aBytesSentBlock;
- (void)setDownloadSizeIncrementedBlock:(ASISizeBlock) aDownloadSizeIncrementedBlock;
- (void)setUploadSizeIncrementedBlock:(ASISizeBlock) anUploadSizeIncrementedBlock;
- (void)setDataReceivedBlock:(ASIDataBlock)aReceivedBlock;

第4、緩存策略代理

 

    NSString *cathPath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];code

   ASIDownloadCache *cache=[[ASIDownloadCachealloc]init];orm

   [cache setStoragePath:cathPath];

    cache.defaultCachePolicy=ASIOnlyLoadIfNotCachedCachePolicy;


    //持久緩存,一直保存在本地

  httpRequest.cacheStoragePolicy = ASICachePermanentlyCacheStoragePolicy;

httpRequest.downloadCache=cache;

    [httpRequest startAsynchronous];


 

      //監聽數據的來源

      if (httpRequest.didUseCachedResponse) {

          NSLog(@"data is from cache");

      }else

      {

          NSLog(@"data is form net");

      }

相關文章
相關標籤/搜索