每个线程都使用自己的代理

Wur*_*bro 2 java https proxy networking http

我正在尝试建立一个Java程序,每个线程都可以使用自己的代理.

现在我只找到了一种全局设置代理的方法.(http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html)

如前所述,这些设置会影响使用这些选项调用的VM的整个生命周期内的所有http连接.但是,使用System.setProperty()方法可以实现稍微更动态的行为.

这是一段代码摘录,展示了如何做到这一点:

//将http代理设置为webcache.mydomain.com:8080

System.setProperty("http.proxyHost","webcache.mydomain.com"); System.setPropery("http.proxyPort","8080");

更新

我尝试使用代理类,但是当我不想使用所述代理时,无法创建直接连接:

private void setProxy()
{
    if(proxyUrl != null)
    {
        SocketAddress addr = new InetSocketAddress(proxyUrl, proxyPort);
        proxy = new Proxy(Proxy.Type.HTTP, addr);
    }
    else
    {
        proxy = new Proxy(Proxy.Type.DIRECT, null);
    }       
}
Run Code Online (Sandbox Code Playgroud)

Exception in .... java.lang.IllegalArgumentException: type DIRECT is not compatible with address null

我怎样才能使这个工作直接连接?尚未尝试代理.

Bar*_* NL 6

也许使用代理类作为解释这里在第3节:

正如我们所看到的,系统属性很强大,但不灵活.大多数开发人员都认为"全有或全无"的行为太严重了.这就是为什么决定在J2SE 5.0中引入一个新的,更灵活的API,以便可以使用基于连接的代理设置.

您可以使用Proxy.NO_PROXY来:

......不要使用任何代理.

做这样的事情:

private void setProxy()
{
    if(proxyUrl != null)
    {
        SocketAddress addr = new InetSocketAddress(proxyUrl, proxyPort);
        proxy = new Proxy(Proxy.Type.HTTP, addr);
    }
    else
    {
        proxy = Proxy.NO_PROXY;
    }       
}
Run Code Online (Sandbox Code Playgroud)