code: def PrepareHttpRequest(self, method_config, request, global_params=None,
                             upload=None, upload_config=None, download=None):
          
          request_type = _LoadClass(
              method_config.request_type_name, self.__client.MESSAGES_MODULE)
          util.Typecheck(request, request_type)
          request = self.__client.ProcessRequest(method_config, request)
  
          http_request = http_wrapper.Request(
              http_method=method_config.http_method)
          self.__SetBaseHeaders(http_request, self.__client)
          self.__SetBody(http_request, method_config, request, upload)
  
          url_builder = _UrlBuilder(
              self.__client.url, relative_path=method_config.relative_path)
          url_builder.query_params = self.__ConstructQueryParams(
              method_config.query_params, request, global_params)
  
          # It's important that upload and download go before we fill in the
          # relative path, so that they can replace it.
          if upload is not None:
              upload.ConfigureRequest(upload_config, http_request, url_builder)
          if download is not None:
              download.ConfigureRequest(http_request, url_builder)
  
          url_builder.relative_path = self.__ConstructRelativePath(
              method_config, request, relative_path=url_builder.relative_path)
          self.__FinalizeRequest(http_request, url_builder)
  
          return self.__client.ProcessHttpRequest(http_request)
docs: Prepares an HTTP request to be sent.