官方網(wǎng)站: http:///ASIHTTPRequest/ ??梢詮纳厦嫦螺d到最新源碼,以及獲取到相關(guān)的資料。 使用iOS SDK中的HTTP網(wǎng)絡(luò)請求API,相當(dāng)?shù)膹?fù)雜,調(diào)用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進(jìn)行了封裝,并且使用起來非常簡單的一套API,用Objective-C編寫,可以很好的應(yīng)用在Mac OS X系統(tǒng)和iOS平臺的應(yīng)用程序中。ASIHTTPRequest適用于基本的HTTP請求,和基于REST的服務(wù)之間的交互。 ASIHTTPRequest功能很強(qiáng)大,主要特色如下:
2.1.1安裝說明如果想在iOS項(xiàng)目中使用ASIHTTPRequest,需要在項(xiàng)目中進(jìn)行簡單的配置,步驟如下: 1) 添加文件往一個Xcode項(xiàng)目中添加第三方類庫文件,有兩種方式: 1. 第一種方式,在Finder中打開需要添加到文件或文件夾,在Xcode中打開要添加文件的項(xiàng)目,然后選中要添加的文件或文件夾,將它從Finder中拖到Xcode中,然后釋放。在彈出的對話框中,如果文件已經(jīng)拷貝到了項(xiàng)目文件目錄中,則不需要選中“Copy items”的復(fù)選框;如果文件沒有拷貝到項(xiàng)目文件目錄,就需要選中“Copy items”的復(fù)選框,這樣Xcode會自動把文件復(fù)制到項(xiàng)目文件目錄下。如下圖所示: 2. 第二種方式,在Xcode中,在要添加文件的分組下點(diǎn)右鍵,選中“Add Files to “My Project”…”菜單,在彈出的文件瀏覽對話框中選中要添加到文件或文件夾。如果要添加文件已經(jīng)拷貝到了項(xiàng)目文件目錄中,則不需要選中“Copy items”的復(fù)選框;如果文件沒有拷貝到項(xiàng)目文件目錄,就需要選中“Copy items”的復(fù)選框,這樣Xcode會自動把文件復(fù)制到項(xiàng)目文件目錄下。如下圖所示: 根據(jù)上面的說明,添加ASIHTTPRequest相關(guān)文件到Xcode項(xiàng)目中,所需文件列表如下: 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 (在源碼的 External/Reachability 目錄下) Reachability.m (在源碼的 External/Reachability 目錄下) 2) 鏈接相關(guān)類庫1. 選中項(xiàng)目 2. 選中目標(biāo) 3. 跳轉(zhuǎn)到“Build Phases”標(biāo)簽 4. 展開“Link Binary With Libraries”分組 5. 點(diǎn)擊“+”添加類庫 如下圖所示: 6. 從列表中選擇CFNetwork.framework,然后點(diǎn)擊“Add”按鈕。 7. 按照上一步相同的方法添加:SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib這幾個類庫。 8. 添加完后,可以將添加好的一起類庫拖到Xcode項(xiàng)目的Frameworks目錄下 2.1.2使用說明ASIHTTPRequest有很多功能,所有功能說明都可以在其官方網(wǎng)站的相關(guān)文檔中查到,限于篇幅,本章僅簡單介紹一下如何使用ASIHTTPRequest來進(jìn)行同步Http請求和異步Http請求。在后面的章節(jié)中,我們還會用到它的一些其他功能。 在使用ASIHTTPRequest之前,請確認(rèn)已經(jīng)正確安裝,然后在需要應(yīng)用它的代碼文件頭部,加入: #import “ASIHTTPRequest.h” 這樣就可以在代碼中使用ASIHTTPRequest相關(guān)的類。 創(chuàng)建一個同步請求這是ASIHTTPRequest最簡單的一種使用模式,發(fā)送startSynchronous消息后即開始在同一線程中執(zhí)行HTTP請求,線程將一直等待直到請求結(jié)束(請求成功或者失?。Mㄟ^檢查error屬性可以判斷請求是否成功或者有錯誤發(fā)生。 要獲取返回的文本信息,調(diào)用responseString方法。如果下載的是二進(jìn)制文件,例如圖片、MP3,則調(diào)用responseData方法,可以得到一個NSData對象。 - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@"http://"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request startSynchronous]; NSError *error = [request error]; if (!error) { NSString *response = [request responseString]; } } 一般情況下,應(yīng)該優(yōu)先使用異步請求代替同步請求,當(dāng)在主線程中使用ASIHTTPRequest同步請求,應(yīng)用程序的界面會鎖定,無法進(jìn)行任何操作,直到請求完成。 創(chuàng)建一個異步請求上例中的同步請求,如果換成異步方式來調(diào)用,請求是在后臺線程中運(yùn)行,當(dāng)請求執(zhí)行完后再通知調(diào)用的線程。這樣不會導(dǎo)致主線程進(jìn)行網(wǎng)絡(luò)請求時,界面被鎖定等情況。 - (IBAction)grabURLInBackground:(id)sender { NSURL *url = [NSURL URLWithString:@"http://"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; [request startAsynchronous]; } - (void)requestFinished:(ASIHTTPRequest *)request { // 當(dāng)以文本形式讀取返回內(nèi)容時用這個方法 NSString *responseString = [request responseString]; // 當(dāng)以二進(jìn)制形式讀取返回內(nèi)容時用這個方法 NSData *responseData = [request responseData]; } - (void)requestFailed:(ASIHTTPRequest *)request { NSError *error = [request error]; } |
|