# Class ProxySelector

java.lang.Object
java.net.ProxySelector

public abstract class ProxySelector extends Object
Selects the proxy server to use, if any, when connecting to the network resource referenced by a URL. A proxy selector is a concrete sub-class of this class and is registered by invoking the `setDefault` method. The currently registered proxy selector can be retrieved by calling `getDefault` method.

When a proxy selector is registered, for instance, a subclass of URLConnection class should call the `select` method for each URL request so that the proxy selector can decide if a direct, or proxied connection should be used. The `select` method returns an iterator over a collection with the preferred connection approach.

If a connection cannot be established to a proxy (PROXY or SOCKS) servers then the caller should call the proxy selector's `connectFailed` method to notify the proxy selector that the proxy server is unavailable.

The default proxy selector does enforce a set of System Properties related to proxy settings.

Since:
  1.5

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ProxySelector()`
  Constructor for subclasses to call.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract void`
  `connectFailed(URI uri, SocketAddress sa, IOException ioe)`
  Called to indicate that a connection could not be established to a proxy/socks server.
  `static ProxySelector`
  `getDefault()`
  Gets the system-wide proxy selector.
  `static ProxySelector`
  `of(InetSocketAddress proxyAddress)`
  Returns a ProxySelector which uses the given proxy address for all HTTP and HTTPS requests.
  `abstract List<Proxy>`
  `select(URI uri)`
  Selects all the applicable proxies based on the protocol to access the resource with and a destination address to access the resource at.
  `static void`
  `setDefault(ProxySelector ps)`
  Sets (or unsets) the system-wide proxy selector.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### ProxySelector

    public ProxySelector()
    Constructor for subclasses to call.

- ## Method Details

  - ### getDefault

    public static ProxySelector getDefault()
    Gets the system-wide proxy selector.
    Returns:
      the system-wide `ProxySelector`
    Since:
      1.5
    See Also:
      - `setDefault(ProxySelector)`

  - ### setDefault

    public static void setDefault(ProxySelector ps)
    Sets (or unsets) the system-wide proxy selector. Note: non-standard protocol handlers may ignore this setting.
    Parameters:
      `ps` - The HTTP proxy selector, or `null` to unset the proxy selector.
    Since:
      1.5
    See Also:
      - `getDefault()`

  - ### select

    public abstract List<Proxy> select(URI uri)
    Selects all the applicable proxies based on the protocol to access the resource with and a destination address to access the resource at. The format of the URI is defined as follows:
    - http URI for http connections
    - https URI for https connections
    - `socket://host:port`
      for tcp client sockets connections
    Parameters:
      `uri` - The URI that a connection is required to
    Returns:
      a List of Proxies. Each element in the List is of type `Proxy`; when no proxy is available, the list will contain one element of type `Proxy` that represents a direct connection.
    Throws:
      `IllegalArgumentException` - if the argument is null or if the protocol or host cannot be determined from the provided `uri`

  - ### connectFailed

    public abstract void connectFailed(URI uri, SocketAddress sa, IOException ioe)
    Called to indicate that a connection could not be established to a proxy/socks server. An implementation of this method can temporarily remove the proxies or reorder the sequence of proxies returned by `select(URI)`, using the address and the IOException caught when trying to connect.
    Parameters:
      `uri` - The URI that the proxy at sa failed to serve.
      `sa` - The socket address of the proxy/SOCKS server
      `ioe` - The I/O exception thrown when the connect failed.
    Throws:
      `IllegalArgumentException` - if either argument is null

  - ### of

    public static ProxySelector of(InetSocketAddress proxyAddress)
    Returns a ProxySelector which uses the given proxy address for all HTTP and HTTPS requests. If `proxyAddress` is `null` then proxying is disabled.
    Parameters:
      `proxyAddress` - The address of the proxy
    Returns:
      a ProxySelector
    Since:
      9