ProxySelector.getDefault().select(uri)命中不到ie代理配置的含有*的例外列表
时间: 2024-05-06 20:18:43 浏览: 249
`ProxySelector.getDefault().select(uri)` 是 Java 用于获取系统默认的代理选择器,并使用该选择器来选择给定 URI 的代理。它不会考虑操作系统或浏览器上设置的任何代理例外列表。
如果您需要在 Java 应用程序中使用代理,并且希望考虑代理例外列表,则可以手动实现一个代理选择器。您可以在自定义的代理选择器中检查代理例外列表,并根据需要选择代理。
以下是一个示例代码,它使用自定义的代理选择器并考虑代理例外列表:
```java
import java.io.IOException;
import java.net.*;
import java.util.*;
public class MyProxySelector extends ProxySelector {
private List<Proxy> proxies;
public MyProxySelector() {
proxies = new ArrayList<>();
String proxyHost = System.getProperty("http.proxyHost");
String proxyPort = System.getProperty("http.proxyPort");
if (proxyHost != null && proxyPort != null) {
proxies.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, Integer.parseInt(proxyPort))));
}
}
@Override
public List<Proxy> select(URI uri) {
// Check if the URI matches any of the proxy exceptions
String proxyExceptions = System.getProperty("http.nonProxyHosts");
if (proxyExceptions != null) {
String[] exceptions = proxyExceptions.split("\\|");
for (String exception : exceptions) {
if (uri.getHost().matches(exception)) {
return Collections.singletonList(Proxy.NO_PROXY);
}
}
}
return proxies;
}
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
// Do nothing
}
}
```
您可以使用以下代码将自定义的代理选择器设置为默认选择器:
```java
ProxySelector.setDefault(new MyProxySelector());
```
请注意,上述示例代码仅考虑了 http 代理。如果您需要使用 https 代理,则需要相应地修改代码。
阅读全文