IOS-網路(ASIHTTPRequest的使用簡介)

來源:互聯網
上載者:User

標籤:

 

使用iOS SDK中的HTTP網路請求API,相當的複雜,調用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進行了封裝,並且使用起來非常簡單的一套API,用Objective-C編寫,可以很好的應用在Mac OS X系統和iOS平台的應用程式中。ASIHTTPRequest適用於基本的HTTP請求,和基於REST的服務之間的互動。

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

  • 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 支援同步和非同步請求
2.1.1安裝說明

如果想在iOS項目中使用ASIHTTPRequest,需要在項目中進行簡單的配置,步驟如下:

1) 添加檔案

往一個Xcode項目中添加第三方類庫檔案,有兩種方式:

1. 第一種方式,在Finder中開啟需要添加到檔案或檔案夾,在Xcode中開啟要添加檔案的項目,然後選中要添加的檔案或檔案夾,將它從Finder中拖到Xcode中,然後釋放。在彈出的對話方塊中,如果檔案已經拷貝到了專案檔目錄中,則不需要選中“Copy items”的複選框;如果檔案沒有拷貝到專案檔目錄,就需要選中“Copy items”的複選框,這樣Xcode會自動把檔案複製到專案檔目錄下。如所示:

2. 第二種方式,在Xcode中,在要添加檔案的分組下點右鍵,選中“Add Files to “My Project”…”菜單,在彈出的檔案瀏覽對話方塊中選中要添加到檔案或檔案夾。如果要添加檔案已經拷貝到了專案檔目錄中,則不需要選中“Copy items”的複選框;如果檔案沒有拷貝到專案檔目錄,就需要選中“Copy items”的複選框,這樣Xcode會自動把檔案複製到專案檔目錄下。如所示:

根據上面的說明,添加ASIHTTPRequest相關檔案到Xcode項目中,所需檔案清單如下:

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) 連結相關類庫

1. 選中項目

2. 選中目標

3. 跳轉到“Build Phases”標籤

4. 展開“Link Binary With Libraries”分組

5. 點擊“+”添加類庫

如所示:

6. 從列表中選擇CFNetwork.framework,然後點擊“Add”按鈕。

7. 按照上一步相同的方法添加:SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib這幾個類庫。

8. 添加完後,可以將添加好的一起類庫拖到Xcode項目的Frameworks目錄下

2.1.2使用說明

ASIHTTPRequest有很多功能,所有功能說明都可以在其官方網站的相關文檔中查到,限於篇幅,本章僅簡單介紹一下如何使用ASIHTTPRequest來進行同步Http請求和非同步Http請求。在後面的章節中,我們還會用到它的一些其他功能。

在使用ASIHTTPRequest之前,請確認已經正確安裝,然後在需要應用它的代碼檔案頭部,加入:

#import “ASIHTTPRequest.h”

這樣就可以在代碼中使用ASIHTTPRequest相關的類。

建立一個同步請求

這是ASIHTTPRequest最簡單的一種使用模式,發送startSynchronous訊息後即開始在同一線程中執行HTTP請求,線程將一直等待直到請求結束(請求成功或者失敗)。通過檢查error屬性可以判斷請求是否成功或者有錯誤發生。

要擷取返回的文本資訊,調用responseString方法。如果下載的是二進位檔案,例片、MP3,則調用responseData方法,可以得到一個NSData對象。

- (IBAction)grabURL:(id)sender

{

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];

}

}

一般情況下,應該優先使用非同步請求代替同步請求,當在主線程中使用ASIHTTPRequest同步請求,應用程式的介面會鎖定,無法進行任何操作,直到請求完成。

建立一個非同步請求

上例中的同步請求,如果換成非同步方式來調用,請求是在後台線程中運行,當請求執行完後再通知調用的線程。這樣不會導致主線程進行網路請求時,介面被鎖定等情況。

- (IBAction)grabURLInBackground:(id)sender

{

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

{

NSError *error = [request error];

}

IOS-網路(ASIHTTPRequest的使用簡介)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.