<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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