3. ASIHTTPRequest-下載數據

將服務器響應數據直接下載到文件

若是你請求的資源很大,你能夠直接將數據下載到文件中來節省內存。此時,ASIHTTPRequest將不會一次將返回數據所有保持在內存中。 瀏覽器

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];

當咱們把數據下載到downloadDestinationPath時,數據將首先被存在臨時文件中。此時文件的路徑名存儲在temporaryFileDownloadPath中(夢維:若是不設置這個值,會自動生成一個文件名,在模擬器中,文件被建立在$TMPDIR中)。當request完成時,會發生下面兩件事之一: 服務器

  • 若是數據是被壓縮過(gzip)的,那麼這個壓縮過的文件將被解壓到downloadDestinationPath,臨時文件會被刪除。
  • 若是數據未被壓縮,那麼這個文件將被移動到downloadDestinationPath,衝突解決方式是:覆蓋已存在的文件。

注意,若是服務器響應數據爲空,那麼文件是不會被建立的。若是你的返回數據可能爲空,那麼你應該先檢查下載文件是否存在,再對文件進行操做。 cookie

 

處理收到的服務器響應數據

若是你想處理服務器響應的數據(例如,你想使用流解析器對正在下載的數據流進行處理),你應該實現代理函數 request:didReceiveData:。注意若是你這麼作了,ASIHTTPRequest將不會填充responseData到內存,也不會將數據寫入文件(downloadDestinationPath )——你必須本身搞定這兩件事(之一)。  app

 

獲取HTTP狀態碼

ASIHTTPRequest並不對HTTP狀態碼作任何處理(除了重定向和受權狀態碼,下面會介紹到),因此你必須本身檢查狀態值並正確處理。 函數

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
int statusCode = [request responseStatusCode];
NSString *statusMessage = [request responseStatusMessage];

 

讀取響應頭

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSString *poweredBy = [[request responseHeaders] objectForKey:@"X-Powered-By"];
NSString *contentType = [[request responseHeaders] objectForKey:@"Content-Type"];

 

處理文本編碼

ASIHTTPRequest會試圖讀取返回數據的編碼信息(Content-Type頭信息)。若是它發現了編碼信息,它會將編碼信息設定爲合適的 NSStringEncoding.若是它沒有找到編碼信息,它會將編碼設定爲默認編碼(NSISOLatin1StringEncoding)。 編碼

當你調用[request responseString],ASIHTTPRequest會嘗試以responseEncoding將返回的Data轉換爲NSString。 url

 

處理重定向

當遇到如下HTTP狀態碼之一時,ASIHTTPRequest會自動重定向到新的URL: 代理

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other

當發生重定向時,響應數據的值(responseHeaders,responseCookies,responseData,responseString等等)將會映射爲最終地址的相應返回數據。 code

當URL發生循環重定向時,設置在這個URL上的cookie將被儲存到全局域中,並在適當的時候隨重定向的請求發送到服務器。 server

Cookies set on any of the urls encountered during a redirection cycle will be stored in the global cookie store, and will be represented to the server on the redirected request when appropriate.

你能夠關閉自動重定向:將shouldRedirect設置爲NO。

默認狀況下,自動重定向會使用GET請求(請求體爲空)。這種行爲符合大多數瀏覽器的行爲,可是HTTP spec規定301和302重定向必須使用原有方法。

要對30一、302重定向使用原方法(包含請求體),在發起請求以前,設置shouldUseRFC2616RedirectBehaviour 爲YES。

相關文章
相關標籤/搜索