HTTP 상태 코드는 iOS SDK의 어디에나 정의되어 있습니까?
여기 에 지정된 HTTP 상태 코드 가 iOS SDK에 정의되어 있는지 여부와 위치를 아는 사람이 있습니까? 아니면 상수 파일에서 수동으로 다시 정의해야합니까?
나는했다
grep -r '404' *
에
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/
빈손으로 나왔으므로 대답은 거의 확실하게 "아니오"입니다.
글쎄요, 그들은
[NSHTTPURLResponse localizedStringForStatusCode:(NSInteger)statusCode]
주어진 상태 코드에 대한 문자열을 반환 할 수 있습니다. 그게 당신이 찾고있는 것입니까?
현재까지 정의 된 모든 코드가있는 완전한 Obj-C 라이브러리가 있습니다. https://github.com/rafiki270/HTTP-Status-Codes-for-Objective-C
업데이트 : 새로운 Swift 버전이 있습니다 : https://github.com/manGoweb/StatusCodes
http 상태 코드는 서버 응답으로 정의 할 수 있습니다. 연결이 있으면 NSURLResponse를 사용하여 statusCode를 읽을 수 있습니다. 이러한 4 ** 응답은 서버에서 내부적으로 정의 할 수 있습니다.
또한 내가 존재할 것으로 예상되는 헤더 파일을 찾을 수 없어서 직접 작성해야했습니다.
GitHub의 nv-ios-http-status 프로젝트에 포함 된 HTTPStatusCodes.h를 사용하면 HTTP 상태 코드를 기반으로하는 디스패치를 다음과 같이 작성할 수 있습니다.
#import "HTTPStatusCodes.h"
......
- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
switch ([res statusCode])
{
// 200 OK
case kHTTPStatusCodeOK:
......;
}
......
}
HTTPStatusCodes.h가 여러분과 다른 개발자의 시간을 절약 할 수 있기를 바랍니다.
재사용 할 수있는 Swift 펜던트도 있습니다.
https://github.com/rhodgkins/SwiftHTTPStatusCodes
수동으로 정의해야 할 것 같습니다. Objective-C에 익숙하지 않습니다. 다음은 내 빠른 정의입니다.
https://httpstatuses.com/에 기반한 Swift 4의 HTTP 상태 열거 형
/// HTTP Statuses
///
/// - continue: Continue
/// - switchingProtocols: Switching Protocols
/// - processing: Processing
/// - ok: OK
/// - created: Created
/// - accepted: Accepted
/// - nonAuthoritativeInformation: Non-authoritative Information
/// - noContent: No Content
/// - resetContent: Reset Content
/// - partialContent: Partial Content
/// - multiStatus: Multi-Status
/// - alreadyReported: Already Reported
/// - iAmUsed: IM Used
/// - multipleChoices: Multiple Choices
/// - movedPermanently: Moved Permanently
/// - found: Found
/// - seeOther: See Other
/// - notModified: Not Modified
/// - useProxy: Use Proxy
/// - temporaryRedirect: Temporary Redirect
/// - permanentRedirect: Permanent Redirect
/// - badRequest: Bad Request
/// - unauthorized: Unauthorized
/// - paymentRequired: Payment Required
/// - forbidden: Forbidden
/// - notFound: Not Found
/// - methodNotAllowed: Method Not Allowed
/// - notAcceptable: Not Acceptable
/// - proxyAuthenticationRequired: Proxy Authentication Required
/// - requestTimeout: Request Timeout
/// - conflict: Conflict
/// - gone: Gone
/// - lengthRequired: Length Required
/// - preconditionFailed: Precondition Failed
/// - payloadTooLarge: Payload Too Large
/// - requestURITooLong: Request-URI Too Long
/// - unsupportedMediaType: Unsupported Media Type
/// - requestedRangeNotSatisfiable: Requested Range Not Satisfiable
/// - expectationFailed: Expectation Failed
/// - iAmATeapot: I'm a teapot
/// - misdirectedRequest: Misdirected Request
/// - unprocessableEntity: Unprocessable Entity
/// - locked: Locked
/// - failedDependency: Failed Dependency
/// - upgradeRequired: Upgrade Required
/// - preconditionRequired: Precondition Required
/// - tooManyRequests: Too Many Requests
/// - requestHeaderFieldsTooLarge: Request Header Fields Too Large
/// - connectionClosedWithoutResponse: Connection Closed Without Response
/// - unavailableForLegalReasons: Unavailable For Legal Reasons
/// - clientClosedRequest: Client Closed Request
/// - internalServerError: Internal Server Error
/// - notImplemented: Not Implemented
/// - badGateway: Bad Gateway
/// - serviceUnavailable: Service Unavailable
/// - gatewayTimeout: Gateway Timeout
/// - httpVersionNotSupported: HTTP Version Not Supported
/// - variantAlsoNegotiates: Variant Also Negotiates
/// - insufficientStorage: Insufficient Storage
/// - loopDetected: Loop Detected
/// - notExtended: Not Extended
/// - networkAuthenticationRequired: Network Authentication Required
/// - networkConnectTimeoutError: Network Connect Timeout Error
enum HttpStatus: Int {
case `continue` = 100
case switchingProtocols = 101
case processing = 102
case ok = 200
case created = 201
case accepted = 202
case nonAuthoritativeInformation = 203
case noContent = 204
case resetContent = 205
case partialContent = 206
case multiStatus = 207
case alreadyReported = 208
case iAmUsed = 226
case multipleChoices = 300
case movedPermanently = 301
case found = 302
case seeOther = 303
case notModified = 304
case useProxy = 305
case temporaryRedirect = 307
case permanentRedirect = 308
case badRequest = 400
case unauthorized = 401
case paymentRequired = 402
case forbidden = 403
case notFound = 404
case methodNotAllowed = 405
case notAcceptable = 406
case proxyAuthenticationRequired = 407
case requestTimeout = 408
case conflict = 409
case gone = 410
case lengthRequired = 411
case preconditionFailed = 412
case payloadTooLarge = 413
case requestURITooLong = 414
case unsupportedMediaType = 415
case requestedRangeNotSatisfiable = 416
case expectationFailed = 417
case iAmATeapot = 418
case misdirectedRequest = 421
case unprocessableEntity = 422
case locked = 423
case failedDependency = 424
case upgradeRequired = 426
case preconditionRequired = 428
case tooManyRequests = 429
case requestHeaderFieldsTooLarge = 431
case connectionClosedWithoutResponse = 444
case unavailableForLegalReasons = 451
case clientClosedRequest = 499
case internalServerError = 500
case notImplemented = 501
case badGateway = 502
case serviceUnavailable = 503
case gatewayTimeout = 504
case httpVersionNotSupported = 505
case variantAlsoNegotiates = 506
case insufficientStorage = 507
case loopDetected = 508
case notExtended = 510
case networkAuthenticationRequired = 511
case networkConnectTimeoutError = 599
}
extension HttpStatus: CustomStringConvertible {
var description: String {
// HTTPURLResponse.localizedString(forStatusCode: rawValue)
return NSLocalizedString(
"http_status_\(rawValue)",
tableName: "HttpStatusEnum",
comment: ""
)
}
}
HttpStatusEnum.strings
:
/// HTTP Status
"http_status_100" = "Continue";
"http_status_101" = "Switching Protocols";
"http_status_102" = "Processing";
"http_status_200" = "OK";
"http_status_201" = "Created";
"http_status_202" = "Accepted";
"http_status_203" = "Non-authoritative Information";
"http_status_204" = "No Content";
"http_status_205" = "Reset Content";
"http_status_206" = "Partial Content";
"http_status_207" = "Multi-Status";
"http_status_208" = "Already Reported";
"http_status_226" = "IM Used";
"http_status_300" = "Multiple Choices";
"http_status_301" = "Moved Permanently";
"http_status_302" = "Found";
"http_status_303" = "See Other";
"http_status_304" = "Not Modified";
"http_status_305" = "Use Proxy";
"http_status_307" = "Temporary Redirect";
"http_status_308" = "Permanent Redirect";
"http_status_400" = "Bad Request";
"http_status_401" = "Unauthorized";
"http_status_402" = "Payment Required";
"http_status_403" = "Forbidden";
"http_status_404" = "Not Found";
"http_status_405" = "Method Not Allowed";
"http_status_406" = "Not Acceptable";
"http_status_407" = "Proxy Authentication Required";
"http_status_408" = "Request Timeout";
"http_status_409" = "Conflict";
"http_status_410" = "Gone";
"http_status_411" = "Length Required";
"http_status_412" = "Precondition Failed";
"http_status_413" = "Payload Too Large";
"http_status_414" = "Request-URI Too Long";
"http_status_415" = "Unsupported Media Type";
"http_status_416" = "Requested Range Not Satisfiable";
"http_status_417" = "Expectation Failed";
"http_status_418" = "I'm a teapot";
"http_status_421" = "Misdirected Request";
"http_status_422" = "Unprocessable Entity";
"http_status_423" = "Locked";
"http_status_424" = "Failed Dependency";
"http_status_426" = "Upgrade Required";
"http_status_428" = "Precondition Required";
"http_status_429" = "Too Many Requests";
"http_status_431" = "Request Header Fields Too Large";
"http_status_444" = "Connection Closed Without Response";
"http_status_451" = "Unavailable For Legal Reasons";
"http_status_499" = "Client Closed Request";
"http_status_500" = "Internal Server Error";
"http_status_501" = "Not Implemented";
"http_status_502" = "Bad Gateway";
"http_status_503" = "Service Unavailable";
"http_status_504" = "Gateway Timeout";
"http_status_505" = "HTTP Version Not Supported";
"http_status_506" = "Variant Also Negotiates";
"http_status_507" = "Insufficient Storage";
"http_status_508" = "Loop Detected";
"http_status_510" = "Not Extended";
"http_status_511" = "Network Authentication Required";
"http_status_599" = "Network Connect Timeout Error";
'Programing' 카테고리의 다른 글
Unity가 항상 SynchronizationLockException을 발생시키지 않도록 만들 수 있습니까? (0) | 2020.11.22 |
---|---|
추상 클래스의 모든 하위 클래스에서 생성자를 강제로 정의하려면 어떻게해야합니까? (0) | 2020.11.22 |
값 유형의 'this'변수 변경 (0) | 2020.11.22 |
CORS : 자격 증명 모드는 '포함'입니다. (0) | 2020.11.22 |
RESTful 방식으로 유효성 검사 API를 노출하는 방법은 무엇입니까? (0) | 2020.11.22 |