text: from ..packages.six.moves import http_client as httplib
  
  from ..exceptions import HeaderParsingError
  
  
  def is_fp_closed(obj):
      """
      Checks whether a given file-like object is closed.
  
      :param obj:
          The file-like object to check.
      """
  
      try:
          # Check via the official file-like-object way.
          return obj.closed
      except AttributeError:
          pass
  
      try:
          # Check if the object is a container for another file-like object that
          # gets released on exhaustion (e.g. HTTPResponse).
          return obj.fp is None
      except AttributeError:
          pass
  
      raise ValueError("Unable to determine whether fp is closed.")
  
  
  def assert_header_parsing(headers):
      """
      Asserts whether all headers have been successfully parsed.
      Extracts encountered errors from the result of parsing headers.
  
      Only works on Python 3.
  
      :param headers: Headers to verify.
      :type headers: `httplib.HTTPMessage`.
  
      :raises urllib3.exceptions.HeaderParsingError:
          If parsing errors are found.
      """
  
      # This will fail silently if we pass in the wrong kind of parameter.
      # To make debugging easier add an explicit check.
      if not isinstance(headers, httplib.HTTPMessage):
          raise TypeError('expected httplib.Message, got {}.'.format(
              type(headers)))
  
      defects = getattr(headers, 'defects', None)
      get_payload = getattr(headers, 'get_payload', None)
  
      unparsed_data = None
      if get_payload:  # Platform-specific: Python 3.
          unparsed_data = get_payload()
  
      if defects or unparsed_data:
          raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
  
  
  def is_response_to_head(response):
      """
      Checks, wether a the request of a response has been a HEAD-request.
      Handles the quirks of AppEngine.
  
      :param conn:
      :type conn: :class:`httplib.HTTPResponse`
      """
      # FIXME: Can we do this somehow without accessing private httplib _method?
      method = response._method
      if isinstance(method, int):  # Platform-specific: Appengine
          return method == 3
      return method.upper() == 'HEAD'
  