プロクシサーバー経由でアクセス
2008/01/05
java
webstart
以前、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();
}
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
: