def _get_response(self, url, **params):
        """ Giving a service path and optional specific arguments, returns
        the response string.
        """
        data = urlencode(params)
        url = "%s?%s" % (url, data)
        headers = {'User-Agent': self.get_random_agent()}
        request = Request(url, headers=headers, method='GET')

        def open_request(request, attempts, err=None):
            if attempts > self.request_attempts:
                raise
            attempts += 1
            try:
                with urlopen(request, timeout=self.timeout) as response:
                    return response.read()
            except HTTPError as err:
                if err.getcode() < 500:
                    raise
                print("HTTPError occurred while trying to request the url "
                      "%s. %s. Trying again in %s seconds..." % (url, err,
                                                self.seconds_between_attempts))
                time.sleep(self.seconds_between_attempts)
                return open_request(request, attempts, err)

        attempts = 0
        self.last_response = open_request(request, attempts)
        return self.last_response