ASIHTTPRequest下载数据
本文為大家介紹了iOS開發ASIHTTPRequest下載數據的內容,其中包括設定將服務器響應數據直接下載到文件,處理收到的服務器響應數據,PUT請求、獲取HTTP狀態碼,讀取響應頭,處理文本編碼,處理重定向等等內容。
將服務器響應數據直接下載到文件
如果你請求的資源很大,你可以直接將數據下載到文件中來節省內存。此時,ASIHTTPRequest將不會一次將返回數據全部保持在內存中。
當我們把數據下載到downloadDestinationPath時,數據將首先被存在臨時文件中。此時文件的路徑名存儲在 temporaryFileDownloadPath中(夢維:如果不設置這個值,會自動生成一個文件名,在模擬器中,文件被創建在$TMPDIR中)。
當request完成時,會發生下面兩件事之一:
如果數據是被壓縮過(gzip)的,那么這個壓縮過的文件將被解壓到downloadDestinationPath,臨時文件會被刪除。
如果數據未被壓縮,那么這個文件將被移動到downloadDestinationPath,沖突解決方式是:覆蓋已存在的文件。
注意:如果服務器響應數據為空,那么文件是不會被創建的。如果你的返回數據可能為空,那么你應該先檢查下載文件是否存在,再對文件進行操作。
處理收到的服務器響應數據
如果你想處理服務器響應的數據(例如,你想使用流解析器對正在下載的數據流進行處理),你應該實現代理函數?request:didReceiveData:。注意如果你這么做了,ASIHTTPRequest將不會填充responseData到內存,也不會將數據寫入文件(downloadDestinationPath?)——你必須自己搞定這兩件事(之一)。?
獲取HTTP狀態碼
ASIHTTPRequest并不對HTTP狀態碼做任何處理(除了重定向和授權狀態碼,下面會介紹到),所以你必須自己檢查狀態值并正確處理。
讀取響應頭
處理文本編碼
ASIHTTPRequest會試圖讀取返回數據的編碼信息(Content-Type頭信息)。如果它發現了編碼信息,它會將編碼信息設定為合適的?NSStringEncoding.如果它沒有找到編碼信息,它會將編碼設定為默認編碼(NSISOLatin1StringEncoding)。
當你調用[request responseString],ASIHTTPRequest會嘗試以responseEncoding將返回的Data轉換為NSString。
處理重定向
當遇到以下HTTP狀態碼之一時,ASIHTTPRequest會自動重定向到新的URL:
- 301 Moved Permanently
- 302 Found
- 303 See Other
當發生重定向時,響應數據的值(responseHeaders,responseCookies,responseData,responseString等等)將會映射為最終地址的相應返回數據。
當URL發生循環重定向時,設置在這個URL上的cookie將被儲存到全局域中,并在適當的時候隨重定向的請求發送到服務器。
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重定向必須使用原有方法。
要對301、302重定向使用原方法(包含請求體),在發起請求之前,設置shouldUseRFC2616RedirectBehaviour?為YES。
轉載于:https://www.cnblogs.com/q403154749/p/3928095.html
總結
以上是生活随笔為你收集整理的ASIHTTPRequest下载数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop配置文件
- 下一篇: ubuntu服务器启动过程中重启卡死的问