def _do_call(self, http_method, url, parameters, auth_handlers,
            content_type, parse_json):

        headers, auth_params = HttpUtils.handle_authentication(auth_handlers)
        parameters.update(auth_params)
        if parse_json:
            headers["Accept"] = "application/json"

        headers.update(UrlUtils.generate_client_headers())

        data = None
        opener = HttpUtils.get_http_opener(content_type)
        if (http_method == "GET"):
            url = UrlUtils.build_url_with_query_string(url, parameters)
        else:
            data, additional_headers = HttpUtils.build_data_for_content_type(
                    content_type, parameters, headers)
            headers.update(additional_headers)

        request = urllib2.Request(url, data, headers)
        request.get_method = lambda: http_method
        try:
            response = opener.open(request)
        except urllib2.HTTPError, e:
            if e.getcode() == 500:
                response = e
            else:
                import sys
                raise MashapeClientException("Error executing the request "
                    + str(sys.exc_info()[1]))
    def do_call(self, http_method, url, parameters, auth_handlers,
            content_type, callback=None, parse_json=True):

        parameters = HttpUtils.clean_parameters(parameters)

        # for asynchronous calls
        if(callback is not None):
            return self._async_call(http_method, url, parameters,
                    auth_handlers, content_type, parse_json)
        else:
            return self._do_call(http_method, url, parameters,
                    auth_handlers, content_type, parse_json)