ProxySelector 确定必须通过代理请求哪个资源作为结果返回列表<代理>
ProxySelector类的方法:
方法 | 说明 |
---|---|
connectFailed() | 建立连接失败时调用该方法 |
getDefault() | 此方法用于检索system-wideProxySelector |
select() | 该方法返回代理人访问资源 |
setDefault() | 该方法用于设置或取消设置system-wide ProxySelector |
示例:逻辑示例代码
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
}
}
执行:使用自定义ProxySelector
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));
}
}
输出:
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
相关用法
- Java java.net.Proxy用法及代码示例
- Java java.net.ProtocolFamily用法及代码示例
- Java java.net.PasswordAuthentication用法及代码示例
- Java java.net.SocketException用法及代码示例
- Java java.net.SocketOption用法及代码示例
- Java java.net.CookiePolicy用法及代码示例
- Java java.net.SecureCacheResponse用法及代码示例
- Java java.net.CacheResponse用法及代码示例
- Java java.net.SocketImplFactory用法及代码示例
- Java java.net.ResponseCache用法及代码示例
- Java java.net.URLPermission用法及代码示例
- Java java.net.NetPermission用法及代码示例
- Java java.net.CacheRequest用法及代码示例
- Java java.net.FileNameMap用法及代码示例
- Java java.net.CookieStore用法及代码示例
- Java java.net.CookieHandler用法及代码示例
- Java java.net.CookieManager用法及代码示例
- Java java.net.BindException用法及代码示例
- Java java.net.URLConnection用法及代码示例
- Java java.net.Socket用法及代码示例
- Java java.net.ServerSocket用法及代码示例
- Java java.net.InetAddress用法及代码示例
- Java java.nio.ByteBuffer用法及代码示例
- Java java.nio.IntBuffer用法及代码示例
- Java java.nio.file.FileStore用法及代码示例
注:本文由纯净天空筛选整理自alijakparovkz大神的英文原创作品 java.net.ProxySelector Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。