Определены ли коды состояния HTTP в любом месте iOS SDK?
кто-нибудь знает, если/, где коды состояния HTTP, как указано здесь, определены в iOS SDK? Или я должен ожидать, чтобы вручную переопределить их в файле констант?
7 ответов:
Я
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** Ответ может быть определен внутренне на вашем сервере.
Я тоже не мог найти файл заголовка, который я ожидал существовать, поэтому пришлось написать свой.
С HTTPStatusCodes.h содержится в nv-ios-http-status проект в GitHub, отправка на основе кодов состояния HTTP может быть записана следующим образом.
#import "HTTPStatusCodes.h" ...... - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSHTTPURLResponse *res = (NSHTTPURLResponse *)response; switch ([res statusCode]) { // 200 OK case kHTTPStatusCodeOK: ......; } ...... }
Я надеюсь HTTPStatusCodes.h может сэкономить время вас и других разработчиков.
- боюсь, вам придется вручную определить их. Я не знаком с Objective-C, следующее мое быстрое определение:
перечисление состояния HTTP в Swift 4 на основе https://httpstatuses.com/
/// 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";