プログラマメモ2 - programmer no memo2

プロクシサーバー経由でアクセス 2008/01/05

以前、java.net.URLを使って、プロキシサーバー経由で接続していた。
プログラマメモ2: java proxyを利用して接続したい。URLクラスの初期化で行えます。

で、どうもうまくいかないケースがあったので、
Java ネットワークとプロキシ
を参考にしたらうまくいった。

うまくいなかかったケース※僕が思い違いしてるかも...
mac osx上でDeleGateを使ってHTTPのproxy serverを動かす。
osx上のネットワーク設定で、WWWプロクシをプライベートアドレス指定。
仮想マシン上のWindows2000(FireFox + JavaWebStart(Java6環境))から接続させると、サーバからHTTP 502エラーがでた。この時のコードがURLのコンストラクタにプロクシの設定を渡していた。

自分が勘違いしている可能性大。Orz...

うまくいったコード(適当だけど)
ProxySelectorクラス,Proxyクラスを使用しています。

public static URLConnection testProxy(URI uri) throws IOException {
try {

System.setProperty("java.net.useSystemProxies","true");
List l = ProxySelector.getDefault().select(
uri);

for (Iterator iter = l.iterator(); iter.hasNext(); ) {

Proxy proxy = (Proxy) iter.next();

System.out.println("proxy hostname : " + proxy.type());

if(!Type.HTTP.equals(proxy.type())) continue;

InetSocketAddress addr = (InetSocketAddress)
proxy.address();


System.out.println(proxy.toString());
if(addr == null) {

System.out.println("No Proxy");

} else {

System.out.println("proxy hostname : " +
addr.getHostName());

System.out.println("proxy port : " +
addr.getPort());


URL url = new URL(uri.toASCIIString());
URLConnection conn = url.openConnection(proxy);

return conn;
}
}
} catch (Exception e) {
e.printStackTrace();
}

return new URL(uri.toASCIIString()).openConnection();
}



参考
Java Tips - How to detect Proxy Settings for Internet Connection

: