開源中國iOS客戶端學習——(五)網絡通訊ASI類庫(1)

現在的應用大部分基予網絡,在開源中國iOS客戶端源碼中關於網絡通訊方面用了三個類庫,ASI和AFNetworking,還有一個蘋果官方給出的Reachability用於檢測當前網絡情況,本文介紹當前用的比較多的ASI類庫; html


ASIHTTPRequest簡稱ASI,它是對CFNetwork API進行封裝,使在與web服務器通訊時的繁瑣步驟變得容易一些。它是使用Objective-C 編寫,可以很好的用在Mac OS X和iPhone應用程序中;它適用於執行基本的HTTP請求和交互基於 REST的服務(GET / POST / PUT /DELETE)互交。 git

ASIHTTPRequest下載 https://github.com/pokeb/asi-http-request/tree
github

關於ASI類庫介紹在  http://allseeing-i.com/ASIHTTPRequest/ web

添加ASI到你工程中步驟 http://allseeing-i.com/ASIHTTPRequest/Setup-instructions json


ASI特色 緩存

l經過簡單的接口,便可完成向服務端提交數據和從服務端獲取數據的工做  服務器

l下載的數據,可存儲到內存中或直接存儲到磁盤中  網絡

l能上傳本地文件到服務端  app

l能夠方便的訪問和操做請求和返回的Http頭信息  框架

l能夠獲取到上傳或下載的進度信息,爲應用程序提供更好的體驗 

l支持上傳或下載隊列,而且可獲取隊列的進度信息 

l支持基本、摘要和NTLM身份認證,在同一會話中受權憑證會自動維持,而且能夠存儲在KeychainMaciOS操做    系統的密碼管理系統)中 

支持Cookie 

l當應用(iOS4+)在後臺運行時,請求能夠繼續運行 

支持GZIP壓縮數據 

l內置的ASIDownloadCache類,能夠緩存請求返回的數據,這樣即便沒有網絡也能夠返回已經緩存的數據結果 

l ASIWebPageRequest –能夠下載完整的網頁,包括包含的網頁、樣式表、腳本等資源文件,並顯示在UIWebView  /WebView中。任意大小的頁面均可以無限期緩存,這樣即便沒有網絡也能夠離線瀏覽 

l支持客戶端證書 

l支持經過代理髮起Http請求 

l支持帶寬限制。在iOS平臺,能夠根據當前網絡狀況來自動決定是否限制帶寬,例如當使  用WWAN(GPRS/Edge/3G)網絡時限制,而當使用WIFI時不作任何限制 

l支持斷點續傳 

l支持同步和異步請



ASI類庫裏包括22個文件,4個主要的類ASIHTTPRequest 、ASIFormDataRequest、ASINetworkQueue、ASIDownloadCache,5個支持的類ASIInputStream、ASIDataDecompressor、ASIDataCompressor、ASIAuthenticationDialog、Reachability,4個協議配置文件ASIHTTPRequestDelegate、ASIProgressDelegate、ASICacheDelegate、ASIHTTPRequestConfig.h,這些文件做用在開發文檔中都有詳細介紹.


http://allseeing-i.com/ASIHTTPRequest/How-to-use有關於初次接觸ASI的簡單使用,頗有必要看一看,

瞭解簡單的同步請求、異步請求,block塊請求,隊列請求等其餘用法。


用ASI寫的一個簡單請求數據的Demo:

測試使用的URL是國家氣象局API,返回一個json數據

#define URL @"http://www.weather.com.cn/data/sk/101010100.html"

    

請求獲得數據:


  1. //同步請求  
  2. - (IBAction)synchronization_bt:(id)sender {  
  3.       
  4.     NSURL *url = [NSURL URLWithString:URL];  
  5.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  6. //    啓動同步方式訪問  
  7.     [request startSynchronous];  
  8.       
  9.     NSError *error = [request error];  
  10. //    請求成功  
  11.     if (!error) {  
  12.         NSString *response = [request responseString];  
  13.         NSLog(@"請求數據:%@",response);   
  14.     }  
  15.     }  
  16.       
  17. }  

  1. //異步請求  
  2. - (IBAction)asynchronous_bt:(id)sender {  
  3.     NSURL *url = [NSURL URLWithString:URL];  
  4.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  5.     [request setDelegate:self];  
  6. //    啓動異步方式訪問  
  7.     [request startAsynchronous];  
  8. }  
  9.   
  10.   
  11. //異步請求Delegate Methods  
  12. -(void)requestFinished:(ASIHTTPRequest *)request  
  13. {  
  14.     NSString *responseString = [request responseString];  
  15.     NSLog(@"請求的String數據:%@",responseString);  
  16. //   以 二進制文件形式存儲  
  17.     NSData *responseData = [request responseData];  
  18.     NSLog(@"請求的Data數據:%@",responseData);  
  19.       
  20. }  
  21. -(void)requestFailed:(ASIHTTPRequest *)request  
  22. {  
  23.     NSError *error = [request error];  
  24.     NSLog(@"Error:%@",error.userInfo);  
  25.   
  26. }  

  1. //block塊請求  
  2. - (IBAction)blocks_tn:(id)sender {  
  3.     NSURL *url = [NSURL URLWithString:URL];  
  4.     __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  5.     [request setCompletionBlock:^{  
  6.         NSString *responseString = [request responseString];  
  7.         NSLog(@"請求的String數據:%@",responseString);  
  8.           
  9.     }];  
  10.     [request setFailedBlock:^{  
  11.         NSError *error = [request error];  
  12.          NSLog(@"Error:%@",error.userInfo);  
  13.     }];  
  14.     [request startAsynchronous];  
  15. }  
  1. //隊列請求  
  2. - (IBAction)queue_bt:(id)sender {  
  3.       
  4.     if (![self queue]) {  
  5.         [self setQueue:[[[NSOperationQueue alloc]init]autorelease]];  
  6.     }  
  7.     NSURL *url = [NSURL URLWithString:URL];  
  8.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  9.     [request setDelegate:self];  
  10.     [request setDidFinishSelector:@selector(requestDone:)];  
  11.     [request setDidFailSelector:@selector(requestWentWrong:)];  
  12.     [[self queue] addOperation:request];  
  13. }  
  14.   
  15. -(void)requestDone:(ASIHTTPRequest *)request  
  16. {  
  17.     NSString *response = [request responseString];  
  18.     NSLog(@"請求的數據:%@",response);  
  19. }  
  20.   
  21. -(void)requestWentWrong:(ASIHTTPRequest *)request  
  22. {  
  23.     NSError *error = [request error];  
  24.     NSLog(@"Error:%@",error.userInfo);  
  25. }  
將類庫加入到工程中不要忘了添加支持的framework框架和庫:

SystemConfiguration.framework, MobileCoreServices.framework, CoreGraphics.framework 和 libz.dylib.


源代碼:http://download.csdn.net/detail/duxinfeng2010/4947729



ASIHTTPRequest中文文檔:





正在學習過程當中,錯誤之處請指正,歡迎交流,共同窗習;

相關文章
相關標籤/搜索