'Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen`
with custom cross-host redirect logic and only sends the request-uri
portion of the ``url``.
The given ``url`` parameter must be absolute, such that an appropriate
:class:`urllib3.connectionpool.ConnectionPool` can be chosen for it.'

def urlopen(self, method, url, redirect=True, **kw):

    u = parse_url(url)
    conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme)
    kw['assert_same_host'] = False
    kw['redirect'] = False
    if ('headers' not in kw):
        kw['headers'] = self.headers
    response = conn.urlopen(method, u.request_uri, **kw)
    redirect_location = (redirect and response.get_redirect_location())
    if (not redirect_location):
        return response
    redirect_location = urljoin(url, redirect_location)
    if (response.status == 303):
        method = 'GET'
    log.info(('Redirecting    %s    ->    %s' % (url, redirect_location)))
    kw['retries'] = (kw.get('retries', 3) - 1)
    kw['redirect'] = redirect
    return self.urlopen(method, redirect_location, **kw)
