'HTTP GET a URI using a proxy, user agent, and other settings
that where previously set in opener_settings.py .
:param uri: This is the URI to GET, with the query string included.
:param data: Object to send as post-data, usually a string or a data
container
:param headers: Any special headers that will be sent with this request
:param cache: Should the library search the local cache for a response
before sending it to the wire?
:param grep: Should grep plugins be applied to this request/response?
:param timeout: If None we\'ll use the configured (opener settings)
timeout or the auto-adjusted value. Otherwise we\'ll use
the defined timeout as the socket timeout value for this
request. The timeout is specified in seconds
:param cookies: Send stored cookies in request (or not)
:param follow_redirects: Follow 30x redirects (or not)
:return: An HTTPResponse object.'

def GET(self, uri, data=None, headers=Headers(), cache=False, grep=True, cookies=True, respect_size_limit=True, error_handling=True, timeout=None, follow_redirects=False, use_basic_auth=True, use_proxy=True):

    if (not isinstance(uri, URL)):
        raise TypeError('The    uri    parameter    of    ExtendedUrllib.GET()    must    be    of    url.URL    type.')
    if (not isinstance(headers, Headers)):
        raise TypeError('The    header    parameter    of    ExtendedUrllib.GET()    must    be    of    Headers    type.')
    self.setup()
    host = uri.get_domain()
    new_connection = (True if (timeout is not None) else False)
    timeout = (self.get_timeout(host) if (timeout is None) else timeout)
    req = HTTPRequest(uri, cookies=cookies, cache=cache, data=data, error_handling=error_handling, method='GET', retries=self.settings.get_max_retrys(), timeout=timeout, new_connection=new_connection, follow_redirects=follow_redirects, use_basic_auth=use_basic_auth, use_proxy=use_proxy)
    req = self.add_headers(req, headers)
    with raise_size_limit(respect_size_limit):
        return self.send(req, grep=grep)
