httpstatusコマンドで、HTTPのステータスコード(
一般的なWeb Programmerならば、HTTP Status codeはすべて暗記していると聞きました。
しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。httpstatus.erlです。インストール方法は:
$ wget https://gist.github.com/takkkun/5002968/raw/569c3e3ea98d1cd8c17a9529c12ac8a88c97350a/httpstatus.erl $ chmod +x httpstatus.erl
です。escript用に書いてあるのでコンパイルとか必要ありません。
$ ./httpstatus.erl 4 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 Large 415: Unsupported Media Type 416: Request Range Not Satisfiable 417: Expectation Failed 418: I'm a teapot 422: Unprocessable Entity 423: Locked 424: Failed Dependency 425: No code 426: Upgrade Required 428: Precondition Required 429: Too Many Requests 431: Request Header Fields Too Large $ ./httpstatus.erl 40 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 $ ./httpstatus.erl 400 400: Bad Request $ ./httpstatus.erl Not 304: Not Modified 404: Not Found 405: Method Not Allowed 406: Not Acceptable 416: Request Range Not Satisfiable 501: Not Implemented 505: HTTP Version Not Supported 510: Not Extended
以下コード。
#!/usr/bin/env escript main([Query|_]) -> case matcher(Query) of {ok, Matcher} -> print(lists:filter(Matcher, http_statuses())); {error, {Message, Position}} -> io:format("Error: ~s at ~p character~n", [Message, Position]) end; main([]) -> print(http_statuses()). matcher([C|_] = Query) when $0 =< C andalso C =< $9 -> case re:compile("^" ++ Query) of {ok, Regexp} -> {ok, fun({Code, _}) -> re:run(Code, Regexp, [{capture, none}]) =:= match end}; {error, ErrorSpec} -> {error, ErrorSpec} end; matcher(Query) -> {ok, fun({_, Message}) -> string:str(Message, Query) > 0 end}. print(HttpStatuses) -> lists:foreach(fun({Code, Message}) -> io:format("~s: ~s~n", [Code, Message]) end, HttpStatuses). http_statuses() -> [ {"100", "Continue"}, {"101", "Switching Protocols"}, {"102", "Processing"}, {"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"}, {"300", "Multiple Choices"}, {"301", "Moved Permanently"}, {"302", "Found"}, {"303", "See Other"}, {"304", "Not Modified"}, {"305", "Use Proxy"}, {"307", "Temporary Redirect"}, {"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 Large"}, {"415", "Unsupported Media Type"}, {"416", "Request Range Not Satisfiable"}, {"417", "Expectation Failed"}, {"418", "I'm a teapot"}, {"422", "Unprocessable Entity"}, {"423", "Locked"}, {"424", "Failed Dependency"}, {"425", "No code"}, {"426", "Upgrade Required"}, {"428", "Precondition Required"}, {"429", "Too Many Requests"}, {"431", "Request Header Fields Too Large"}, {"449", "Retry with"}, {"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"}, {"509", "Bandwidth Limit Exceeded"}, {"510", "Not Extended"}, {"511", "Network Authentication Required"} ].