ProxySelector determina qué recurso debe solicitarse a través de proxy como resultado, devuelve List<Proxy>
Métodos de la clase ProxySelector:
Método | Descripción |
---|---|
Conexión fallida() | Este método se invoca cuando no se pudo establecer una conexión |
getDefault() | Este método se utiliza para recuperar el ProxySelector de todo el sistema |
Seleccione() | Este método devuelve Proxy para acceder al recurso |
establecer predeterminado() | Este método se utiliza para configurar o desactivar el ProxySelector de todo el sistema |
Ilustración: código de muestra para lógica
Java
// Java Program to illustrate ProxySelector Class // of java.net package // only creating methods here // Importing standard input output classes import java.io.IOException; // Importing classes from java.net package import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; // Importing List and ArrayList as utility classes from // java.util package import java.util.ArrayList; import java.util.List; // Class 1 // Helper class extending ProxySelector class public class PrivateDataProxy extends ProxySelector { // According to API we need to return List<Proxy> // even if we return only one element, so // Creating List class object of Proxy type private final List<Proxy> noProxy = new ArrayList<>(); private final List<Proxy> proxies = new ArrayList<>(); // Constructor of this class public PrivateDataProxy() { // If no proxy required to access resource // use Proxy.NO_PROXY noProxy.add(Proxy.NO_PROXY); // Creating InetSocketAddress, and // secure.connection.com doesn't exist 443 is an // https port InetSocketAddress inetSocketAddress = new InetSocketAddress("secure.connection.com", 443); // Now creating http proxy Proxy proxy = new Proxy(Proxy.Type.HTTP, inetSocketAddress); // Finally adding proxy into proxy list proxies.add(proxy); } // Method 1 of this class //@Override public List<Proxy> select(URI uri) { if (uri.getPath().startsWith("/confidential")) { // If URI path starts with '/confidential' then // use proxy server return proxies; } // If url don't start with '/confidential' then // no need in proxy return noProxy; } // Method 2 of this class // @Override public void connectFailed(URI arg0, SocketAddress arg1, IOException arg2) { // Properly handle connection failing } }
Implementación: uso de ProxySelector personalizado
Java
// Java Program to illustrate ProxySelector Class // of java.net package // Using custom ProxySelector // Importing required classes from respective packages import java.io.IOException; import java.net.Proxy; import java.net.ProxySelector; import java.net.URISyntaxException; import java.net.URL; import java.util.List; // Main class public class ProxySelectorDemo { // Main driver method public static void main(String[] args) throws URISyntaxException, IOException { // Passing the string uri PrivateDataProxy privateDataProxy = new PrivateDataProxy(); // The setting the system-wide proxy selector ProxySelector.setDefault(privateDataProxy); // Print the default value // using getDefault() method System.out.println("Default value: " + ProxySelector.getDefault()); // Display message only System.out.println( "Getting proxy for /confidential"); // Passing the string URL String confidentialUrl = "https://www.download.com/confidential"; // Now, calling the constructor of the URL class URL confidential = new URL(confidentialUrl); // Requiring an proxy for url List<Proxy> confidentialProxies = privateDataProxy.select(confidential.toURI()); // Show the proxy that was selected System.out.println("Proxy to use : " + confidentialProxies.get(0)); // Display message only System.out.println( "Getting proxy for /non-confidential"); // passing the string URL // Custom URL as input String nonConfidentialURL = "https://www.download.com/non-confidential"; // Now, calling the constructor of the URL class URL nonConfidential = new URL(nonConfidentialURL); // Requiring an proxy for URL List<Proxy> nonConfidentialProxies = privateDataProxy.select( nonConfidential.toURI()); // Display the proxy that was selected System.out.println("Proxy to use : " + nonConfidentialProxies.get(0)); } }
Producción:
Default value: entity.PrivateDataProxy@5cad8086 Getting proxy for /confidential Proxy to use : HTTP @ secure.connection.com:443 Getting proxy for /non-confidential Proxy to use : DIRECT
Publicación traducida automáticamente
Artículo escrito por alijakparovkz y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA