mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-23 04:20:21 +08:00
Output a string representation of the HTTP status code in the HTTP operation log. Add RKStringFromStatusCode convenience method to the HTTP utilities
This commit is contained in:
@@ -78,9 +78,15 @@ NSRange RKStatusCodeRangeForClass(RKStatusCodeClass statusCodeClass);
|
||||
*/
|
||||
NSIndexSet *RKStatusCodeIndexSetForClass(RKStatusCodeClass statusCodeClass);
|
||||
|
||||
// TODO: Implement these guys...
|
||||
//NSString * RKStringFromStatusCode(NSInteger statusCode);
|
||||
//NSInteger RKStatusCodeFromString(NSString *statusCode);
|
||||
/**
|
||||
Returns string representation of a given HTTP status code.
|
||||
|
||||
The list of supported status codes was built from http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
|
||||
|
||||
@param statusCode The HTTP status code to return a string from.
|
||||
@return A string representation of the given status code.
|
||||
*/
|
||||
NSString *RKStringFromStatusCode(NSInteger statusCode);
|
||||
|
||||
/**
|
||||
Parse HTTP Date: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
|
||||
|
||||
@@ -59,6 +59,97 @@ RKRequestMethod RKRequestMethodFromString(NSString *methodName)
|
||||
else return RKRequestMethodInvalid;
|
||||
}
|
||||
|
||||
// Built from http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
|
||||
static NSDictionary *RKStatusCodesToNamesDictionary()
|
||||
{
|
||||
static NSDictionary *statusCodesToNamesDictionary = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
statusCodesToNamesDictionary = @{
|
||||
// 1xx (Informational)
|
||||
@(100): @"Continue",
|
||||
@(101): @"Switching Protocols",
|
||||
@(102): @"Processing",
|
||||
|
||||
// 2xx (Success)
|
||||
@(200): @"OK",
|
||||
@(201): @"Created",
|
||||
@(202): @"Accepted",
|
||||
@(203): @"Non-Authoritative Information",
|
||||
@(204): @"No Content",
|
||||
@(205): @"Reset Content",
|
||||
@(206): @"Partial Content",
|
||||
@(207): @"Multi-Status",
|
||||
@(208): @"Already Reported",
|
||||
@(226): @"IM Used",
|
||||
|
||||
// 3xx (Redirection)
|
||||
@(300): @"Multiple Choices",
|
||||
@(301): @"Moved Permanently",
|
||||
@(302): @"Found",
|
||||
@(303): @"See Other",
|
||||
@(304): @"Not Modified",
|
||||
@(305): @"Use Proxy",
|
||||
@(306): @"Switch Proxy",
|
||||
@(307): @"Temporary Redirect",
|
||||
@(308): @"Permanent Redirect",
|
||||
|
||||
// 4xx (Client Error)
|
||||
@(400): @"Bad Request",
|
||||
@(401): @"Unauthorized",
|
||||
@(402): @"Payment Required",
|
||||
@(403): @"Forbidden",
|
||||
@(404): @"Not Found",
|
||||
@(405): @"Method Not Allowed",
|
||||
@(406): @"Not Acceptable",
|
||||
@(407): @"Proxy Authentication Required",
|
||||
@(408): @"Request Timeout",
|
||||
@(409): @"Conflict",
|
||||
@(410): @"Gone",
|
||||
@(411): @"Length Required",
|
||||
@(412): @"Precondition Failed",
|
||||
@(413): @"Request Entity Too Large",
|
||||
@(414): @"Request-URI Too Long",
|
||||
@(415): @"Unsupported Media Type",
|
||||
@(416): @"Requested Range Not Satisfiable",
|
||||
@(417): @"Expectation Failed",
|
||||
@(418): @"I'm a teapot",
|
||||
@(420): @"Enhance Your Calm",
|
||||
@(422): @"Unprocessable Entity",
|
||||
@(423): @"Locked",
|
||||
@(424): @"Failed Dependency",
|
||||
@(424): @"Method Failure",
|
||||
@(425): @"Unordered Collection",
|
||||
@(426): @"Upgrade Required",
|
||||
@(428): @"Precondition Required",
|
||||
@(429): @"Too Many Requests",
|
||||
@(431): @"Request Header Fields Too Large",
|
||||
@(451): @"Unavailable For Legal Reasons",
|
||||
|
||||
// 5xx (Server Error)
|
||||
@(500): @"Internal Server Error",
|
||||
@(501): @"Not Implemented",
|
||||
@(502): @"Bad Gateway",
|
||||
@(503): @"Service Unavailable",
|
||||
@(504): @"Gateway Timeout",
|
||||
@(505): @"HTTP Version Not Supported",
|
||||
@(506): @"Variant Also Negotiates",
|
||||
@(507): @"Insufficient Storage",
|
||||
@(508): @"Loop Detected",
|
||||
@(509): @"Bandwidth Limit Exceeded",
|
||||
@(510): @"Not Extended",
|
||||
@(511): @"Network Authentication Required",
|
||||
};
|
||||
});
|
||||
return statusCodesToNamesDictionary;
|
||||
}
|
||||
|
||||
NSString * RKStringFromStatusCode(NSInteger statusCode)
|
||||
{
|
||||
return [RKStatusCodesToNamesDictionary() objectForKey:@(statusCode)];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Below is ragel source used to compile those tables. The output was polished / pretty-printed and tweaked from ragel.
|
||||
As the generated code is "hard" to debug, we store the code in http-date.r1
|
||||
|
||||
Reference in New Issue
Block a user