日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ASIHTTPRequest下载数据

發布時間:2024/8/24 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASIHTTPRequest下载数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文為大家介紹了iOS開發ASIHTTPRequest下載數據的內容,其中包括設定將服務器響應數據直接下載到文件,處理收到的服務器響應數據,PUT請求、獲取HTTP狀態碼,讀取響應頭,處理文本編碼,處理重定向等等內容。

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

如果你請求的資源很大,你可以直接將數據下載到文件中來節省內存。此時,ASIHTTPRequest將不會一次將返回數據全部保持在內存中。

當我們把數據下載到downloadDestinationPath時,數據將首先被存在臨時文件中。此時文件的路徑名存儲在 temporaryFileDownloadPath中(夢維:如果不設置這個值,會自動生成一個文件名,在模擬器中,文件被創建在$TMPDIR中)。

  • ASIHTTPRequest?*request?=?[ASIHTTPRequest?requestWithURL:url];?
  • [request?setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];?
  • 當request完成時,會發生下面兩件事之一:

    如果數據是被壓縮過(gzip)的,那么這個壓縮過的文件將被解壓到downloadDestinationPath,臨時文件會被刪除。

    如果數據未被壓縮,那么這個文件將被移動到downloadDestinationPath,沖突解決方式是:覆蓋已存在的文件。

    注意:如果服務器響應數據為空,那么文件是不會被創建的。如果你的返回數據可能為空,那么你應該先檢查下載文件是否存在,再對文件進行操作。

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

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

    獲取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。

    處理重定向

    當遇到以下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下载数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。