若是你請求的資源很大,你能夠直接將數據下載到文件中來節省內存。此時,ASIHTTPRequest將不會一次將返回數據所有保持在內存中。 瀏覽器
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];
當咱們把數據下載到downloadDestinationPath時,數據將首先被存在臨時文件中。此時文件的路徑名存儲在temporaryFileDownloadPath中(夢維:若是不設置這個值,會自動生成一個文件名,在模擬器中,文件被建立在$TMPDIR中)。當request完成時,會發生下面兩件事之一: 服務器
注意,若是服務器響應數據爲空,那麼文件是不會被建立的。若是你的返回數據可能爲空,那麼你應該先檢查下載文件是否存在,再對文件進行操做。 cookie
若是你想處理服務器響應的數據(例如,你想使用流解析器對正在下載的數據流進行處理),你應該實現代理函數 request:didReceiveData:。注意若是你這麼作了,ASIHTTPRequest將不會填充responseData到內存,也不會將數據寫入文件(downloadDestinationPath )——你必須本身搞定這兩件事(之一)。 app
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: 代理
當發生重定向時,響應數據的值(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。