'Execute the request.
Args:
http: httplib2.Http, an http object to be used in place of the
one the HttpRequest request object was constructed with.
num_retries: Integer, number of times to retry with randomized
exponential backoff. If all retries fail, the raised HttpError
represents the last request. If zero (default), we attempt the
request only once.
Returns:
A deserialized object model of the response body as determined
by the postproc.
Raises:
googleapiclient.errors.HttpError if the response was not a 2xx.
httplib2.HttpLib2Error if a transport error has occured.'

@util.positional(1)
def execute(self, http=None, num_retries=0):

    if (http is None):
        http = self.http
    if self.resumable:
        body = None
        while (body is None):
            (_, body) = self.next_chunk(http=http, num_retries=num_retries)
        return body
    if ('content-length' not in self.headers):
        self.headers['content-length'] = str(self.body_size)
    if ((len(self.uri) > MAX_URI_LENGTH) and (self.method == 'GET')):
        self.method = 'POST'
        self.headers['x-http-method-override'] = 'GET'
        self.headers['content-type'] = 'application/x-www-form-urlencoded'
        parsed = urlparse(self.uri)
        self.uri = urlunparse((parsed.scheme, parsed.netloc, parsed.path, parsed.params, None, None))
        self.body = parsed.query
        self.headers['content-length'] = str(len(self.body))
    (resp, content) = _retry_request(http, num_retries, 'request', self._sleep, self._rand, str(self.uri), method=str(self.method), body=self.body, headers=self.headers)
    for callback in self.response_callbacks:
        callback(resp)
    if (resp.status >= 300):
        raise HttpError(resp, content, uri=self.uri)
    return self.postproc(resp, content)
