def get_proxies(self, url):
        """
        Get the proxies that are applicable to a given URL, according to the PAC file.

        :param str url: The URL for which to find appropriate proxies.
        :return: All the proxies that apply to the given URL.
            Can be empty, which means to abort the request.
        :rtype: list[str]
        """
        hostname = urlparse(url).hostname
        if hostname is None:
            # URL has no hostname, and PAC functions don't expect to receive nulls.
            hostname = ""

        value_from_js_func = self.pac.find_proxy_for_url(url, hostname)
        if value_from_js_func in self._cache:
            return self._cache[value_from_js_func]

        config_values = parse_pac_value(self.pac.find_proxy_for_url(url, hostname), self.socks_scheme)
        if self._proxy_auth:
            config_values = [add_proxy_auth(value, self._proxy_auth) for value in config_values]

        self._cache[value_from_js_func] = config_values

        return config_values
Get the proxies that are applicable to a given URL, according to the PAC file.

        :param str url: The URL for which to find appropriate proxies.
        :return: All the proxies that apply to the given URL.
            Can be empty, which means to abort the request.
        :rtype: list[str]