2

各スレッドが独自のプロキシを使用できる 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);
    }       
}

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

これを直接接続で機能させるにはどうすればよいですか? プロキシはまだ試していません。

4

2 に答える 2

0

Barry NL のソリューションは、そのソリューションでプロキシを使用しない方法を理解できなかったため、半分は機能しました。

私が思いついたもの:

proxyUrlproxyPort私のクラスのコンストラクターにあります。

url.openConnection(proxy);設定しただけでは通話できませんでしたproxy = null

またはproxy = new Proxy(Proxy.Type.DIRECT, null);。だから自分で書いたopenConnection

private void setProxy()
{
    if(proxyUrl != null)
    {
        SocketAddress addr = new InetSocketAddress(proxyUrl, proxyPort);
        proxy = new Proxy(Proxy.Type.HTTP, addr);
    }
    else
    {
        proxy = null;
    }       
}
private URLConnection openConnection2(URL url)
{
    try {
        if(proxy != null)               
            return url.openConnection(proxy);               
        else 
            return url.openConnection();            
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }   
}

setProxy()接続を行う前に呼び出す必要があります。

また、交換しました

url = new URL(http_url);
con = (HttpURLConnection)url.openConnection(proxy);

url = new URL(http_url);
con = (HttpURLConnection)openConnection2(url);  
于 2013-05-10T11:41:25.747 に答える