docs: def retrieve_page(self, method, path, post_params={}, headers={},
                        status=200, username=None, password=None,
                        *args, **kwargs):
          """
          Makes the actual request.  This will also go through and generate the
          needed steps to make the request, i.e. basic auth.
  
          ``method``:
              Any supported HTTP methods defined in :rfc:`2616`.
          ``path``:
              Absolute or relative path. See :meth:`_prepare_uri` for more
              detail.
          ``post_params``:
              Dictionary of key/value pairs to be added as `POST` parameters.
          ``headers``:
              Dictionary of key/value pairs to be added to the HTTP headers.
          ``status``:
              Will error out if the HTTP status code does not match this value.
              Set this to `None` to disable checking.
          ``username``, ``password``:
              Username and password for basic auth; see
              :meth:`_prepare_basicauth` for more detail.
  
          An important note is that when ``post_params`` is specified, its
          behavior depends on the ``method``.  That is, for `PUT` and `POST`
          requests, the dictionary is multipart encoded and put into the body of
          the request.  For everything else, it is added as a query string to the
          URL.
          """
          # Copy headers so that making changes here won't affect the original
          headers = headers.copy()
  
          # Update basic auth information
          basicauth = self._prepare_basicauth(username, password)
          if basicauth:
              headers.update([basicauth])
  
          # If this is a POST or PUT, we can put the data into the body as
          # form-data encoded; otherwise, it should be part of the query string.
          if method in ["PUT", "POST"]:
              datagen, form_hdrs = poster.encode.multipart_encode(post_params)
              body = "".join(datagen)
              headers.update(form_hdrs)
              uri = self._prepare_uri(path)
          else:
              body = ""
              uri = self._prepare_uri(path, post_params)
  
          # Make the actual request
          response = self._make_request(uri, method, body, headers)
  
          # Assert that the status we received was expected.
          if status:
              real_status = int(response.status_int)
              assert real_status == int(status), \
                      "expected %s, received %s." % (status, real_status)
  
          return response