Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java检测Windows/IE代理设置_Java_Proxy - Fatal编程技术网

使用Java检测Windows/IE代理设置

使用Java检测Windows/IE代理设置,java,proxy,Java,Proxy,我需要自动检测用户是否需要代理才能访问internet。Java应用程序是否有办法读取系统代理设置 谢谢, JimmyJava SE 1.5提供ProxySelector类来检测代理设置。如果存在到Internet的直接连接,则代理类型将为Direct,否则将返回主机和端口 下面的示例说明了此功能: import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; import jav

我需要自动检测用户是否需要代理才能访问internet。Java应用程序是否有办法读取系统代理设置

谢谢,
Jimmy

Java SE 1.5提供ProxySelector类来检测代理设置。如果存在到Internet的直接连接,则代理类型将为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();
        }
    }
}
导入java.net.InetSocketAddress;
导入java.net.Proxy;
导入java.net.ProxySelector;
导入java.net.URI;
导入java.util.Iterator;
导入java.util.List;
公共类TestProxy{
公共静态void main(字符串[]args){
试一试{
setProperty(“java.net.useSystemProxies”,“true”);
List l=ProxySelector.getDefault()。选择(
新URI(“http://www.yahoo.com/"));
for(迭代器iter=l.Iterator();iter.hasNext();){
Proxy Proxy=iter.next();
System.out.println(“代理主机名:+proxy.type());
InetSocketAddress addr=(InetSocketAddress)proxy.address();
if(addr==null){
System.out.println(“无代理”);
}否则{
System.out.println(“代理主机名:+addr.getHostName());
System.out.println(“代理端口:+addr.getPort());
}
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
这个被接受的答案无疑是非常优秀和正确的,但我想我会在这里补充一些东西

如果您在配置了“自动检测代理设置”的机器上,我相信这就是所谓的“自动检测代理设置”,那么使用Java gubbins在答案中检测代理的代码将不起作用(它将认为这是一个“直接”连接)

但是,有一个名为(我认为是新的)的库,您可以使用它,因此下面是答案的代码,经过稍微修改后可以使用:

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;

哦,还有一些代理vole的使用示例。

我得到的是:代理主机名:DIRECT No proxy这是否意味着我不在代理服务器后面?不要忘记导入java.util.*和java.net.*以获取此代码。提醒一下-您需要导入这些导入java.net.InetSocketAddress;导入java.net.Proxy;导入java.net.ProxySelector;导入java.net.URI;导入java.util.Iterator;导入java.util.List;很好,这就是我一直在寻找的,因为我们正在使用PAC脚本。在使用代码后,我必须以编程方式设置代理主机/端口,而不是在eclipse中作为VM参数传入。