class_docstr: HTTP Response object.
  
  Attributes:
  
  * request: HTTPRequest object
  
  * code: numeric HTTP status code, e.g. 200 or 404
  
  * reason: human-readable reason phrase describing the status code
  
  * headers: `tornado.httputil.HTTPHeaders` object
  
  * effective_url: final location of the resource after following any
    redirects
  
  * buffer: ``cStringIO`` object for response body
  
  * body: response body as bytes (created on demand from ``self.buffer``)
  
  * error: Exception object, if any
  
  * request_time: seconds from request start to finish
  
  * time_info: dictionary of diagnostic timing information from the request.
    Available data are subject to change, but currently uses timings
    available from http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html,
    plus ``queue``, which is the delay (if any) introduced by waiting for
    a slot under `AsyncHTTPClient`'s ``max_clients`` setting.
class_docstr_tok: ["HTTP","Response","object",".","Attributes",":","*","request",":","HTTPRequest","object","*","code",":","numeric","HTTP","status","code",",","e.g",".","200","or","404","*","reason",":","human-readable","reason","phrase","describing","the","status","code","*","headers",":","`","tornado.httputil.HTTPHeaders","`","object","*","effective_url",":","final","location","of","the","resource","after","following","any","redirects","*","buffer",":","``","cStringIO","``","object","for","response","body","*","body",":","response","body","as","bytes","(","created","on","demand","from","``","self.buffer","``",")","*","error",":","Exception","object",",","if","any","*","request_time",":","seconds","from","request","start","to","finish","*","time_info",":","dictionary","of","diagnostic","timing","information","from","the","request",".","Available","data","are","subject","to","change",",","but","currently","uses","timings","available","from","http",":","\/\/curl.haxx.se\/libcurl\/c\/curl_easy_getinfo.html",",","plus","``","queue","``",",","which","is","the","delay","(","if","any",")","introduced","by","waiting","for","a","slot","under","`","AsyncHTTPClient","`","'s","``","max_clients","``","setting","."]
code: def __init__(
      self,
      request,
      code,
      headers=None,
      buffer=None,
      effective_url=None,
      error=None,
      request_time=None,
      time_info=None,
      reason=None,
  ):
      if isinstance(request, _RequestProxy):
          self.request = request.request
      else:
          self.request = request
      self.code = code
      self.reason = reason or httputil.responses.get(code, "Unknown")
      if headers is not None:
          self.headers = headers
      else:
          self.headers = httputil.HTTPHeaders()
      self.buffer = buffer
      self._body = None
      if effective_url is None:
          self.effective_url = request.url
      else:
          self.effective_url = effective_url
      if error is None:
          if self.code < 200 or self.code >= 300:
              self.error = HTTPError(
                  self.code, message=self.reason, response=self
              )
          else:
              self.error = None
      else:
          self.error = error
      self.request_time = request_time
      self.time_info = time_info or {}
  
imports: from __future__ import absolute_import, division, print_function
  import functools
  import time
  import weakref
  from tornado.concurrent import TracebackFuture
  from tornado.escape import utf8, native_str
  from tornado import httputil, stack_context
  from tornado.ioloop import IOLoop
  from tornado.util import Configurable
label_desc: Use image node_id 1 to create a new HTTPResponse object from inherited base classes: object with example: obj = HTTPResponse(request, code, headers, buffer, effective_url, error, request_time, time_info, reason)