版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.05.26 |
前言
我們做APP發(fā)起網(wǎng)絡請求儿子,一般都是使用框架,這些框架的底層也都是蘋果的API蛀序,接下來幾篇就一起來看一下和網(wǎng)絡有關的幾個類纤控。感興趣的可以看上面幾篇文章挂捻。
1. 詳細解析幾個和網(wǎng)絡請求有關的類 (一) —— NSURLSession
2. 詳細解析幾個和網(wǎng)絡請求有關的類(二) —— NSURLRequest和NSMutableURLRequest
3. 詳細解析幾個和網(wǎng)絡請求有關的類(三) —— NSURLConnection
4. 詳細解析幾個和網(wǎng)絡請求有關的類(四) —— NSURLSession和NSURLConnection的區(qū)別
5. 詳細解析幾個和網(wǎng)絡請求有關的類(五) —— 關于NSURL加載系統(tǒng)(一)
6. 詳細解析幾個和網(wǎng)絡請求有關的類(六) —— 使用NSURLSession(二)
7. 詳細解析幾個和網(wǎng)絡請求有關的類(七) —— URL數(shù)據(jù)的編碼和解碼(三)
8. 詳細解析幾個和網(wǎng)絡請求有關的類(八) —— 處理重定向和其他請求更改(四)
9. 詳細解析幾個和網(wǎng)絡請求有關的類(九) —— 身份驗證挑戰(zhàn)和TLS鏈驗證(五)
10. 詳細解析幾個和網(wǎng)絡請求有關的類(十) —— 理解獲取緩存(六)
11. 詳細解析幾個和網(wǎng)絡請求有關的類(十一) —— Cookies和自定義協(xié)議(七)
12. 詳細解析幾個和網(wǎng)絡請求有關的類(十二) —— URL Session的生命周期(八)
13. 詳細解析幾個和網(wǎng)絡請求有關的類(十三) —— NSURLResponse(一)
14. 詳細解析幾個和網(wǎng)絡請求有關的類(十四) —— NSHTTPCookie(一)
15. 詳細解析幾個和網(wǎng)絡請求有關的類(十五) —— NSHTTPCookieStorage(一)
16. 詳細解析幾個和網(wǎng)絡請求有關的類(十六) —— NSURLCache(一)
17. 詳細解析幾個和網(wǎng)絡請求有關的類(十七) —— NSCachedURLResponse(一)
18. 詳細解析幾個和網(wǎng)絡請求有關的類(十八) —— NSURLAuthenticationChallenge(一)
19. 詳細解析幾個和網(wǎng)絡請求有關的類(十九) —— NSURLProtectionSpace(一)
20. 詳細解析幾個和網(wǎng)絡請求有關的類(二十) —— NSURLCredential(一)
21. 詳細解析幾個和網(wǎng)絡請求有關的類(二十一) —— NSURLCredentialStorage(一)
22. 詳細解析幾個和網(wǎng)絡請求有關的類(二十二) —— NSStream(一)
23. 詳細解析幾個和網(wǎng)絡請求有關的類(二十三) —— NSInputStream(一)
24. 詳細解析幾個和網(wǎng)絡請求有關的類(二十四) —— NSOutputStream(一)
25. 詳細解析幾個和網(wǎng)絡請求有關的類(二十五) —— NSHTTPCookie之設置刪除和通信(二)
回顧
上一篇講述了Cookie的設置刪除以及利用Cookie進行通信,下面這篇我們繼續(xù)深入一下看一下和URL Loading
相關的錯誤碼NSURLError
船万。
NSURLError - API
下面首先看一下NSURLError - API
*/
#if TARGET_OS_IPHONE
#if __has_include(<CFNetwork/CFNetwork.h>)
#import <CFNetwork/CFNetwork.h>
#endif
#elif TARGET_OS_WIN32
#import <CFNetwork/CFNetwork.h>
#else
#import <CoreServices/CoreServices.h>
#endif
#import <Foundation/NSObjCRuntime.h>
#import <Foundation/NSError.h>
@class NSString;
NS_ASSUME_NONNULL_BEGIN
/*
@discussion Constants used by NSError to differentiate between "domains" of error codes, serving as a discriminator for error codes that originate from different subsystems or sources.
@constant NSURLErrorDomain Indicates an NSURL error.
*/
FOUNDATION_EXPORT NSErrorDomain const NSURLErrorDomain;
/*!
@const NSURLErrorFailingURLErrorKey
@abstract The NSError userInfo dictionary key used to store and retrieve the URL which caused a load to fail.
*/
FOUNDATION_EXPORT NSString * const NSURLErrorFailingURLErrorKey API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
/*!
@const NSURLErrorFailingURLStringErrorKey
@abstract The NSError userInfo dictionary key used to store and retrieve the NSString object for the URL which caused a load to fail.
@discussion This constant supersedes NSErrorFailingURLStringKey, which was deprecated in Mac OS X 10.6. Both constants refer to the same value for backward-compatibility, but this symbol name has a better prefix.
*/
FOUNDATION_EXPORT NSString * const NSURLErrorFailingURLStringErrorKey API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
/*!
@const NSErrorFailingURLStringKey
@abstract The NSError userInfo dictionary key used to store and retrieve the NSString object for the URL which caused a load to fail.
@discussion This constant is deprecated in Mac OS X 10.6, and is superseded by NSURLErrorFailingURLStringErrorKey. Both constants refer to the same value for backward-compatibility, but the new symbol name has a better prefix.
*/
FOUNDATION_EXPORT NSString * const NSErrorFailingURLStringKey API_DEPRECATED("Use NSURLErrorFailingURLStringErrorKey instead", macos(10.0,10.6), ios(2.0,4.0), watchos(2.0,2.0), tvos(9.0,9.0));
/*!
@const NSURLErrorFailingURLPeerTrustErrorKey
@abstract The NSError userInfo dictionary key used to store and retrieve the SecTrustRef object representing the state of a failed SSL handshake.
*/
FOUNDATION_EXPORT NSString * const NSURLErrorFailingURLPeerTrustErrorKey API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
/*!
@const NSURLErrorBackgroundTaskCancelledReasonKey
@abstract The NSError userInfo dictionary key used to store and retrieve the NSNumber corresponding to the reason why a background
NSURLSessionTask was cancelled
*/
FOUNDATION_EXPORT NSString * const NSURLErrorBackgroundTaskCancelledReasonKey API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
/*!
@enum Codes associated with NSURLErrorBackgroundTaskCancelledReasonKey
@abstract Constants used by NSError to indicate why a background NSURLSessionTask was cancelled.
*/
NS_ENUM(NSInteger)
{
NSURLErrorCancelledReasonUserForceQuitApplication = 0,
NSURLErrorCancelledReasonBackgroundUpdatesDisabled = 1,
NSURLErrorCancelledReasonInsufficientSystemResources API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) = 2,
} API_AVAILABLE(macos(10.10), ios(7.0), watchos(2.0), tvos(9.0));
/*!
@enum NSURL-related Error Codes
@abstract Constants used by NSError to indicate errors in the NSURL domain
*/
NS_ERROR_ENUM(NSURLErrorDomain)
{
NSURLErrorUnknown = -1,
NSURLErrorCancelled = -999,
NSURLErrorBadURL = -1000,
NSURLErrorTimedOut = -1001,
NSURLErrorUnsupportedURL = -1002,
NSURLErrorCannotFindHost = -1003,
NSURLErrorCannotConnectToHost = -1004,
NSURLErrorNetworkConnectionLost = -1005,
NSURLErrorDNSLookupFailed = -1006,
NSURLErrorHTTPTooManyRedirects = -1007,
NSURLErrorResourceUnavailable = -1008,
NSURLErrorNotConnectedToInternet = -1009,
NSURLErrorRedirectToNonExistentLocation = -1010,
NSURLErrorBadServerResponse = -1011,
NSURLErrorUserCancelledAuthentication = -1012,
NSURLErrorUserAuthenticationRequired = -1013,
NSURLErrorZeroByteResource = -1014,
NSURLErrorCannotDecodeRawData = -1015,
NSURLErrorCannotDecodeContentData = -1016,
NSURLErrorCannotParseResponse = -1017,
NSURLErrorAppTransportSecurityRequiresSecureConnection API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = -1022,
NSURLErrorFileDoesNotExist = -1100,
NSURLErrorFileIsDirectory = -1101,
NSURLErrorNoPermissionsToReadFile = -1102,
NSURLErrorDataLengthExceedsMaximum API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)) = -1103,
NSURLErrorFileOutsideSafeArea API_AVAILABLE(macos(10.12.4), ios(10.3), watchos(3.2), tvos(10.2)) = -1104,
// SSL errors
NSURLErrorSecureConnectionFailed = -1200,
NSURLErrorServerCertificateHasBadDate = -1201,
NSURLErrorServerCertificateUntrusted = -1202,
NSURLErrorServerCertificateHasUnknownRoot = -1203,
NSURLErrorServerCertificateNotYetValid = -1204,
NSURLErrorClientCertificateRejected = -1205,
NSURLErrorClientCertificateRequired = -1206,
NSURLErrorCannotLoadFromNetwork = -2000,
// Download and file I/O errors
NSURLErrorCannotCreateFile = -3000,
NSURLErrorCannotOpenFile = -3001,
NSURLErrorCannotCloseFile = -3002,
NSURLErrorCannotWriteToFile = -3003,
NSURLErrorCannotRemoveFile = -3004,
NSURLErrorCannotMoveFile = -3005,
NSURLErrorDownloadDecodingFailedMidStream = -3006,
NSURLErrorDownloadDecodingFailedToComplete =-3007,
NSURLErrorInternationalRoamingOff API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1018,
NSURLErrorCallIsActive API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1019,
NSURLErrorDataNotAllowed API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1020,
NSURLErrorRequestBodyStreamExhausted API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1021,
NSURLErrorBackgroundSessionRequiresSharedContainer API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) = -995,
NSURLErrorBackgroundSessionInUseByAnotherProcess API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) = -996,
NSURLErrorBackgroundSessionWasDisconnected API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))= -997,
};
NS_ASSUME_NONNULL_END
這里有一個很重要的錯誤碼枚舉NSURLErrorDomain刻撒,里面定義了錯誤碼的值。
NSURLErrorDomain詳細解析
先看一下其基本情況
1. NSURLErrorUnknown
URL加載系統(tǒng)遇到無法解釋的錯誤時返回耿导。
當錯誤來自較低級別的框架或庫時声怔,可能會發(fā)生這種情況。 無論何時收到此錯誤代碼舱呻,都是一個錯誤醋火,應該向Apple報告。
適用于Mac OS X v10.2及更高版本。
2. NSURLErrorCancelled
當異步加載被取消時返回芥驳。
Web Kit
框架代理在對加載資源執(zhí)行取消操作時將收到此錯誤柿冲。 請注意,如果下載被取消兆旬,NSURLConnection
或NSURLDownload
代理將不會收到此錯誤假抄。
適用于Mac OS X v10.2及更高版本。
在NSURLError.h
中聲明爵憎。
3. NSURLErrorBadURL
當URL格式錯誤慨亲,無法啟動URL請求時返回
適用于Mac OS X v10.2及更高版本婚瓜。
在NSURLError.h
中聲明宝鼓。
4. NSURLErrorTimedOut
當異步操作超時時返回。
如果NSURLRequest
中的timeoutInterval
在加載完成之前到期巴刻,NSURLConnection
會將此錯誤發(fā)送給它的委托愚铡。
適用于Mac OS X v10.2及更高版本。
在NSURLError.h
中聲明胡陪。
5. NSURLErrorUnsupportedURL
當形成的URL不能被框架處理時返回沥寥。
最可能的原因是URL沒有可用的協(xié)議處理程序。
適用于Mac OS X v10.2及更高版本柠座。
在NSURLError.h
中聲明邑雅。
6. NSURLErrorCannotFindHost
當無法解析URL的主機名時返回。
適用于Mac OS X v10.2
及更高版本妈经。
在NSURLError.h
中聲明淮野。
7. NSURLErrorCannotConnectToHost
當嘗試連接到主機失敗時返回。
當主機名解析時吹泡,可能會發(fā)生這種情況骤星,但主機已關閉或可能不接受某個端口上的連接。
適用于Mac OS X v10.2
及更高版本爆哑。
在NSURLError.h
中聲明洞难。
8. NSURLErrorDataLengthExceedsMaximum
當資源數(shù)據(jù)的長度超過允許的最大值時返回。
適用于Mac OS X v10.5
及更高版本揭朝。
在NSURLError.h
中聲明队贱。
9. NSURLErrorNetworkConnectionLost
當客戶端或服務器連接在正在進行的加載過程中被切斷時返回。
適用于Mac OS X v10.2
及更高版本潭袱。
在NSURLError.h
中聲明露筒。
10. NSURLErrorDNSLookupFailed
請參閱NSURLErrorCannotFindHost
適用于Mac OS X v10.2
及更高版本。
在NSURLError.h
中聲明敌卓。
11. NSURLErrorHTTPTooManyRedirects
當檢測到重定向循環(huán)或超過允許重定向次數(shù)閾值(當前為16)時返回慎式。
適用于Mac OS X v10.2
及更高版本。
在NSURLError.h
中聲明。
12. NSURLErrorResourceUnavailable
無法檢索請求的資源時返回瘪吏。
例如“未找到文件”以及數(shù)據(jù)解碼問題癣防,這些問題會阻止數(shù)據(jù)正確處理。
適用于Mac OS X v10.2
及更高版本掌眠。
在NSURLError.h
中聲明蕾盯。
13. NSURLErrorNotConnectedToInternet
當請求網(wǎng)絡資源時返回,但互聯(lián)網(wǎng)連接未建立蓝丙,并且無法自動建立级遭,無論是通過缺少連接還是由用戶選擇不自動建立網(wǎng)絡連接。
適用于Mac OS X v10.2
及更高版本渺尘。
在NSURLError.h
中聲明挫鸽。
14. NSURLErrorRedirectToNonExistentLocation
當通過服務器響應代碼指定重定向時返回,但服務器不附帶重定向URL鸥跟。
適用于Mac OS X v10.2
及更高版本丢郊。
在NSURLError.h
中聲明。
15. NSURLErrorBadServerResponse
URL加載系統(tǒng)收到來自服務器的錯誤數(shù)據(jù)時返回医咨。
這相當于HTTP服務器發(fā)送的500 Server Error
消息枫匾。
適用于Mac OS X v10.2
及更高版本。
在NSURLError.h
中聲明拟淮。
16. NSURLErrorUserCancelledAuthentication
用戶取消異步認證請求時返回干茉。
這通常是通過點擊用戶名/密碼對話框中的“取消”按鈕而發(fā)生的,而不是用戶嘗試進行身份驗證很泊。
適用于Mac OS X v10.2
及更高版本角虫。
在NSURLError.h
中聲明。
17. NSURLErrorUserAuthenticationRequired
在需要認證來訪問資源時返回撑蚌。
適用于Mac OS X v10.2
及更高版本上遥。
在NSURLError.h
中聲明。
18. NSURLErrorZeroByteResource
當服務器報告URL的內(nèi)容長度不為零時返回争涌,但會“優(yōu)雅地”終止網(wǎng)絡連接而不發(fā)送任何數(shù)據(jù)粉楚。
適用于Mac OS X v10.2
及更高版本。
在NSURLError.h
中聲明亮垫。
19. NSURLErrorCannotDecodeRawData
在NSURLConnection
請求期間收到的內(nèi)容數(shù)據(jù)無法解碼已知內(nèi)容編碼時返回模软。
適用于Mac OS X v10.5
及更高版本。
在NSURLError.h
中聲明饮潦。
20. NSURLErrorCannotDecodeContentData
在NSURLConnection
請求期間收到的內(nèi)容數(shù)據(jù)具有未知內(nèi)容編碼時返回燃异。
適用于Mac OS X v10.5
及更高版本。
在NSURLError.h
中聲明继蜡。
21. NSURLErrorCannotParseResponse
當對NSURLConnection
請求的響應無法解析時返回回俐。
適用于Mac OS X v10.5
及更高版本逛腿。
在NSURLError.h
中聲明。
22. NSURLErrorFileDoesNotExist
當文件不存在時返回仅颇。
適用于Mac OS X v10.2
及更高版本单默。
在NSURLError.h
中聲明。
23. NSURLErrorFileIsDirectory
當對FTP
文件的請求導致服務器響應該文件不是普通文件而是文件夾目錄時返回忘瓦。
適用于Mac OS X v10.2
及更高版本搁廓。
在NSURLError.h
中聲明。
24. NSURLErrorNoPermissionsToReadFile
由于權(quán)限不足而無法讀取資源時返回耕皮。
適用于Mac OS X v10.2
及更高版本境蜕。
在NSURLError.h
中聲明。
25. NSURLErrorSecureConnectionFailed
當嘗試建立安全連接失敗時凌停,由于無法更具體地表達的原因而返回粱年。
適用于Mac OS X v10.2
及更高版本。
在NSURLError.h
中聲明苦锨。
26. NSURLErrorServerCertificateHasBadDate
當服務器證書的日期顯示已過期或尚未生效時返回逼泣。
適用于Mac OS X v10.2
及更高版本趴泌。
在NSURLError.h
中聲明舟舒。
27. NSURLErrorServerCertificateUntrusted
當服務器證書由不受信任的根服務器簽名時返回。
適用于Mac OS X v10.2
及更高版本嗜憔。
在NSURLError.h
中聲明秃励。
28. NSURLErrorServerCertificateHasUnknownRoot
服務器證書未由任何根服務器簽名時返回。
適用于Mac OS X v10.2
及更高版本吉捶。
在NSURLError.h
中聲明夺鲜。
29. NSURLErrorServerCertificateNotYetValid
當服務器證書尚未有效時返回。
適用于Mac OS X v10.4
及更高版本呐舔。
在NSURLError.h
中聲明币励。
30. NSURLErrorClientCertificateRejected
當服務器證書被拒絕時返回。
適用于Mac OS X v10.4
及更高版本珊拼。
在NSURLError.h
中聲明食呻。
31. NSURLErrorClientCertificateRequired
在NSURLConnection
請求期間需要客戶端證書來驗證SSL連接時返回。
適用于Mac OS X v10.6
及更高版本澎现。
在NSURLError.h
中聲明仅胞。
32. NSURLErrorCannotLoadFromNetwork
僅當從緩存中加載項目的特定請求無法滿足時才會返回。
這個錯誤是在庫去網(wǎng)絡的時候發(fā)送的剑辫,因為load only from cache
指令阻止了這個事實的發(fā)生干旧。
適用于Mac OS X v10.2
及更高版本。
在NSURLError.h
中聲明妹蔽。
33. NSURLErrorCannotCreateFile
當NSURLDownload
對象由于I / O故障而無法在磁盤上創(chuàng)建下載的文件時返回椎眯。
適用于Mac OS X v10.2
及更高版本挠将。
在NSURLError.h
中聲明。
34. NSURLErrorCannotOpenFile
當NSURLDownload
無法在磁盤上打開下載的文件時返回编整。
適用于Mac OS X v10.2
及更高版本捐名。
在NSURLError.h
中聲明。
35. NSURLErrorCannotCloseFile
當NSURLDownload
無法關閉磁盤上的下載文件時返回闹击。
適用于Mac OS X v10.2
及更高版本镶蹋。
在NSURLError.h
中聲明。
36. NSURLErrorCannotWriteToFile
當NSURLDownload
無法寫入磁盤上的下載文件時返回赏半。
適用于Mac OS X v10.2
及更高版本贺归。
在NSURLError.h
中聲明。
37. NSURLErrorCannotRemoveFile
當NSURLDownload
無法從磁盤刪除下載的文件時返回断箫。
適用于Mac OS X v10.2
及更高版本拂酣。
在NSURLError.h
中聲明。
38. NSURLErrorCannotMoveFile
當NSURLDownload
無法將下載的文件移動到磁盤上時返回仲义。
適用于Mac OS X v10.2
及更高版本婶熬。
在NSURLError.h
中聲明。
39. NSURLErrorDownloadDecodingFailedMidStream
當在下載過程中NSURLDownload
無法解碼編碼文件時返回埃撵。
適用于Mac OS X v10.2
及更高版本赵颅。
在NSURLError.h
中聲明。
40. NSURLErrorDownloadDecodingFailedToComplete
當下載后NSURLDownload
無法解碼編碼文件時返回暂刘。
適用于Mac OS X v10.2
及更高版本饺谬。
在NSURLError.h
中聲明。
41. NSURLErrorInternationalRoamingOff
當連接需要在漫游時激活數(shù)據(jù)上下文時返回谣拣,但國際漫游已禁用募寨。
適用于iOS 3.0
及更高版本。
在NSURLError.h
中聲明森缠。
42. NSURLErrorCallIsActive
當在不支持同時進行電話和數(shù)據(jù)通信(EDGE或GPRS)的網(wǎng)絡上打電話時嘗試進行連接時返回拔鹰。
適用于iOS 3.0
及更高版本。
在NSURLError.h
中聲明贵涵。
43. NSURLErrorDataNotAllowed
當蜂窩網(wǎng)絡不允許連接時返回列肢。
適用于iOS 3.0
及更高版本。
在NSURLError.h
中聲明独悴。
44. NSURLErrorRequestBodyStreamExhausted
當需要正文流但客戶端不提供正文流時返回例书。 這會影響使用正文流發(fā)送POST請求的iOS客戶端,但不會實現(xiàn)NSURLConnection
代理方法連接:needNewBodyStream
刻炒。
適用于iOS 3.0
及更高版本决采。
在NSURLError.h
中聲明。
45. NSURLErrorBackgroundSessionRequiresSharedContainer
46. NSURLErrorBackgroundSessionInUseByAnotherProcess
47. NSURLErrorBackgroundSessionWasDisconnected
關于NSURLErrorDomain的使用
NSURLErrorDomain
的使用就是用來根據(jù)不同的錯誤碼提示坟奥,找到對應問題的原因树瞭,最終還是落實到問題的解決上拇厢,所以本篇文章只是對錯誤碼的了解,真正最后的作用是根據(jù)不同的錯誤碼可以快速定位問題所在晒喷,解決問題孝偎。
大家可以看一個阿里關于錯誤碼處理的文集 —— NSURLErrorDomain,里面是不同框架不同情況的錯誤碼提示以及相關的解決方法凉敲。
參考文章
1. NSError code錯誤列表信息(NSFileManage衣盾、NSURL...)
2. iOS中的NSError code(錯誤碼)
后記
本篇主要介紹URL加載系統(tǒng)的錯誤碼及其相關作用,感興趣的給點贊或者關注~~~~