Winerror.hなどを見ていると、HTTPステータスコードを表現するHRESULT値があることに気付きます。
最初にネタばらししてしまうと、すべてMAKE_HRESULT(SEVERITY_ERROR, FACILITY_HTTP, ステータスコード)で組み立てられるのです。それでは、一覧してみましょう。
定数名 | 値 |
---|---|
BG_E_HTTP_ERROR_100 | 0x80190064 |
BG_E_HTTP_ERROR_101 | 0x80190065 |
BG_E_HTTP_ERROR_200 | 0x801900C8 |
BG_E_HTTP_ERROR_201 | 0x801900C9 |
BG_E_HTTP_ERROR_202 | 0x801900CA |
BG_E_HTTP_ERROR_203 | 0x801900CB |
BG_E_HTTP_ERROR_204 | 0x801900CC |
BG_E_HTTP_ERROR_205 | 0x801900CD |
BG_E_HTTP_ERROR_206 | 0x801900CE |
BG_E_HTTP_ERROR_300 | 0x8019012C |
HTTP_E_STATUS_AMBIGUOUS | |
BG_E_HTTP_ERROR_301 | 0x8019012D |
HTTP_E_STATUS_MOVED | |
BG_E_HTTP_ERROR_302 | 0x8019012E |
HTTP_E_STATUS_REDIRECT | |
BG_E_HTTP_ERROR_303 | 0x8019012F |
HTTP_E_STATUS_REDIRECT_METHOD | |
BG_E_HTTP_ERROR_304 | 0x80190130 |
HTTP_E_STATUS_NOT_MODIFIED | |
BG_E_HTTP_ERROR_305 | 0x80190131 |
HTTP_E_STATUS_USE_PROXY | |
BG_E_HTTP_ERROR_307 | 0x80190133 |
HTTP_E_STATUS_REDIRECT_KEEP_VERB | |
BG_E_HTTP_ERROR_400 | 0x80190190 |
HTTP_E_STATUS_BAD_REQUEST | |
BG_E_HTTP_ERROR_401 | 0x80190191 |
HTTP_E_STATUS_DENIED | |
BG_E_HTTP_ERROR_402 | 0x80190192 |
HTTP_E_STATUS_PAYMENT_REQ | |
BG_E_HTTP_ERROR_403 | 0x80190193 |
HTTP_E_STATUS_FORBIDDEN | |
BG_E_HTTP_ERROR_404 | 0x80190194 |
HTTP_E_STATUS_NOT_FOUND | |
BG_E_HTTP_ERROR_405 | 0x80190195 |
HTTP_E_STATUS_BAD_METHOD | |
BG_E_HTTP_ERROR_406 | 0x80190196 |
HTTP_E_STATUS_NONE_ACCEPTABLE | |
BG_E_HTTP_ERROR_407 | 0x80190197 |
HTTP_E_STATUS_PROXY_AUTH_REQ | |
BG_E_HTTP_ERROR_408 | 0x80190198 |
HTTP_E_STATUS_REQUEST_TIMEOUT | |
BG_E_HTTP_ERROR_409 | 0x80190199 |
HTTP_E_STATUS_CONFLICT | |
BG_E_HTTP_ERROR_410 | 0x8019019A |
HTTP_E_STATUS_GONE | |
BG_E_HTTP_ERROR_411 | 0x8019019B |
HTTP_E_STATUS_LENGTH_REQUIRED | |
BG_E_HTTP_ERROR_412 | 0x8019019C |
HTTP_E_STATUS_PRECOND_FAILED | |
BG_E_HTTP_ERROR_413 | 0x8019019D |
HTTP_E_STATUS_REQUEST_TOO_LARGE | |
BG_E_HTTP_ERROR_414 | 0x8019019E |
HTTP_E_STATUS_URI_TOO_LONG | |
BG_E_HTTP_ERROR_415 | 0x8019019F |
HTTP_E_STATUS_UNSUPPORTED_MEDIA | |
BG_E_HTTP_ERROR_416 | 0x801901A0 |
HTTP_E_STATUS_RANGE_NOT_SATISFIABLE | |
BG_E_HTTP_ERROR_417 | 0x801901A1 |
HTTP_E_STATUS_EXPECTATION_FAILED | |
BG_E_HTTP_ERROR_449 | 0x801901C1 |
BG_E_HTTP_ERROR_500 | 0x801901F4 |
HTTP_E_STATUS_SERVER_ERROR | |
BG_E_HTTP_ERROR_501 | 0x801901F5 |
HTTP_E_STATUS_NOT_SUPPORTED | |
BG_E_HTTP_ERROR_502 | 0x801901F6 |
HTTP_E_STATUS_BAD_GATEWAY | |
BG_E_HTTP_ERROR_503 | 0x801901F7 |
HTTP_E_STATUS_SERVICE_UNAVAIL | |
BG_E_HTTP_ERROR_504 | 0x801901F8 |
HTTP_E_STATUS_GATEWAY_TIMEOUT | |
BG_E_HTTP_ERROR_505 | 0x801901F9 |
HTTP_E_STATUS_VERSION_NOT_SUP |
HTTP_E_STATUS系はwinerror.hにあります。ただし、比較的新しいWindows SDKからのようです。Windows SDK 7.1では存在しませんでした。一方、BG_E系はBitsMsg.hに結構前から存在するようです。
なお、FACILITY_HTTPの中にはステータスコードそのままではない値も定義されています。つまり、HRESULからHTTPステータスコードを取り出すときには、FACILITY_HTTPかつHRESULT_CODEの結果が100~599の範囲という条件を課すと良いのではないかと思います。
HTTP_E_STATUS_UNEXPECTED | 0x80190001 |
HTTP_E_STATUS_UNEXPECTED_REDIRECTION | 0x80190003 |
HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR | 0x80190004 |
HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR | 0x80190005 |
HTTP_E_STATUS_UNEXPECTEDは予期せぬステータスコード、後の3つは、それぞれ300番台、400番台、500番台すべてを意味する値のようです。winerror.hには以下のように書かれています。
// // MessageId: HTTP_E_STATUS_UNEXPECTED // // MessageText: // // Unexpected HTTP status code. // #define HTTP_E_STATUS_UNEXPECTED _HRESULT_TYPEDEF_(0x80190001L) // // MessageId: HTTP_E_STATUS_UNEXPECTED_REDIRECTION // // MessageText: // // Unexpected redirection status code (3xx). // #define HTTP_E_STATUS_UNEXPECTED_REDIRECTION _HRESULT_TYPEDEF_(0x80190003L) // // MessageId: HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR // // MessageText: // // Unexpected client error status code (4xx). // #define HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR _HRESULT_TYPEDEF_(0x80190004L) // // MessageId: HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR // // MessageText: // // Unexpected server error status code (5xx). // #define HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR _HRESULT_TYPEDEF_(0x80190005L)
200番台に対して失敗扱い(SEVERITY_ERROR: 最上位ビットを1)とするのは違和感が拭えないですが、400番台・500番台なら使ってもよいと思いました。
スポンサード リンク |