Определение настроек прокси Windows / IE с использованием Java - PullRequest
23 голосов
/ 08 февраля 2011

Мне нужно автоматически определить, нужен ли пользователю прокси для доступа в интернет.Есть ли способ для приложения Java, чтобы прочитать настройки прокси системы?

Спасибо, Джимми

Ответы [ 2 ]

34 голосов
/ 08 февраля 2011

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();
        }
    }
}
26 голосов
/ 11 июля 2014

Ответ прочее , ответ принят, несомненно, превосходен и корректен, но я подумал, что хотел бы кое-что добавить сюда ...

Если вы работаете на машине, которая настроена на "автоматическое определениенастройки прокси-сервера », который, я считаю, называется 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;

О, и здесь есть примеры использования для прокси-полевки здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...