Определение настроек прокси Windows/IE с использованием Java
Мне нужно автоматически определить, требуется ли пользователю доступ к Интернету через прокси-сервер. Есть ли способ для приложения Java, чтобы прочитать настройки прокси системы?
Спасибо джимми
2 ответа
Java SE 1.5 предоставляет класс ProxySelector для определения настроек прокси. Если есть прямое подключение к Интернету, тип прокси будет DIRECT, иначе он вернет хост и порт.
Пример ниже иллюстрирует эту функциональность:
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
public class TestProxy {
public static void main(String[] args) {
try {
System.setProperty("java.net.useSystemProxies","true");
List<Proxy> l = ProxySelector.getDefault().select(
new URI("http://www.yahoo.com/"));
for (Iterator<Proxy> iter = l.iterator(); iter.hasNext(); ) {
Proxy proxy = iter.next();
System.out.println("proxy hostname : " + proxy.type());
InetSocketAddress addr = (InetSocketAddress)proxy.address();
if(addr == null) {
System.out.println("No Proxy");
} else {
System.out.println("proxy hostname : " + addr.getHostName());
System.out.println("proxy port : " + addr.getPort());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Другой, принятый, ответ, несомненно, является превосходным и правильным, но я подумал, что хотел бы кое-что добавить сюда...
Если вы находитесь на машине, на которой настроено "автоматическое определение параметров прокси-сервера", которое, как я считаю, называется PAC, код для обнаружения прокси-сервера в ответе с использованием Java Gubbins не будет работать (он будет думать, что это "прямой"). подключение).
Однако есть библиотека, которая называется proxy vole (я думаю, что это новая лицензия BSD), которую вы можете использовать взамен, так что вот код другого ответа, слегка модифицированный для этого:
public class testProxy {
public static void main(String[] args) {
try {
System.setProperty("java.net.useSystemProxies","true");
// Use proxy vole to find the default proxy
ProxySearch ps = ProxySearch.getDefaultProxySearch();
ps.setPacCacheSettings(32, 1000*60*5);
List l = ps.getProxySelector().select(
new URI("http://www.yahoo.com/"));
//... Now just do what the original did ...
for (Iterator iter = l.iterator(); iter.hasNext(); ) {
Proxy proxy = (Proxy) iter.next();
System.out.println("proxy hostname : " + proxy.type());
InetSocketAddress addr = (InetSocketAddress)
proxy.address();
if(addr == null) {
System.out.println("No Proxy");
} else {
System.out.println("proxy hostname : " +
addr.getHostName());
System.out.println("proxy port : " +
addr.getPort());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Нужен такой импорт:
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
import com.btr.proxy.search.ProxySearch;
О, и здесь есть примеры использования прокси-полевки.