/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package java.net; import java.io.IOException; import java.util.List; /** * Selects the proxy server to use, if any, when connecting to a given URL. * *
The default proxy selector is configured by system properties. * *
Hostname patterns | |||
---|---|---|---|
URL scheme | property name | description | default |
ftp | ftp.nonProxyHosts | Hostname pattern for FTP servers to connect to * directly (without a proxy). | * |
http | http.nonProxyHosts | Hostname pattern for HTTP servers to connect to * directly (without a proxy). | * |
https | https.nonProxyHosts | Hostname pattern for HTTPS servers to connect * to directly (without a proxy). | * |
{@linkplain Proxy.Type#HTTP HTTP Proxies} | |||
URL scheme | property name | description | default |
ftp | ftp.proxyHost | Hostname of the HTTP proxy server used for * FTP requests. | |
ftp.proxyPort | Port number of the HTTP proxy server used for FTP * requests. | 80 | |
http | http.proxyHost | Hostname of the HTTP proxy server used * for HTTP requests. | |
http.proxyPort | Port number of the HTTP proxy server used for HTTP * requests. | 80 | |
https | https.proxyHost | Hostname of the HTTP proxy server used * for HTTPS requests. | |
https.proxyPort | Port number of the HTTP proxy server used for HTTPS * requests. | 443 | |
ftp, http or https | proxyHost | Hostname of the HTTP proxy * server used for FTP, HTTP and HTTPS requests. | |
proxyPort | Port number of the HTTP proxy server. | 80 for FTP and HTTP
* 443 for HTTPS | |
{@linkplain Proxy.Type#SOCKS SOCKS * Proxies} | |||
URL scheme | property name | description | default |
ftp, http, https or socket | socksProxyHost | Hostname of the
* SOCKS proxy server used for FTP, HTTP, HTTPS and raw sockets. Raw socket URLs are of the * form socket://host:port | |
socksProxyPort | Port number of the SOCKS proxy server. | 1080 |
Hostname patterns specify which hosts should be connected to directly, * ignoring any other proxy system properties. If the URL's host matches the * corresponding hostname pattern, {@link Proxy#NO_PROXY} is returned. * *
The format of a hostname pattern is a list of hostnames that are * separated by {@code |} and that use {@code *} as a wildcard. For example, * setting the {@code http.nonProxyHosts} property to {@code * *.android.com|*.kernel.org} will cause requests to {@code * http://developer.android.com} to be made without a proxy. * *
The default proxy selector always returns exactly one proxy. If no proxy * is applicable, {@link Proxy#NO_PROXY} is returned. If multiple proxies are * applicable, such as when both the {@code proxyHost} and {@code * socksProxyHost} system properties are set, the result is the property listed * earliest in the table above. * *
To request a URL without involving the system proxy selector, explicitly * specify a proxy or {@link Proxy#NO_PROXY} using {@link * URL#openConnection(Proxy)}. * *
Use {@link ProxySelector#setDefault(ProxySelector)} to install a custom
* proxy selector.
*/
public abstract class ProxySelector {
private static ProxySelector defaultSelector = new ProxySelectorImpl();
/**
* Returns the default proxy selector, or null if none exists.
*/
public static ProxySelector getDefault() {
return defaultSelector;
}
/**
* Sets the default proxy selector. If {@code selector} is null, the current
* proxy selector will be removed.
*/
public static void setDefault(ProxySelector selector) {
defaultSelector = selector;
}
/**
* Returns the proxy servers to use on connections to {@code uri}. This list
* will contain {@link Proxy#NO_PROXY} if no proxy server should be used.
*
* @throws IllegalArgumentException if {@code uri} is null.
*/
public abstract List