web-dev-qa-db-ja.com

javaでHTTPプロキシを使用する方法

クローラーのように、Webサイトに接続してコードをチェックするコードを書いています。しかし、プロキシを介して接続し、IPアドレスを変更する必要があります(したがって、サーバーログにクライアントのIPが表示されません)。

これはどのようにJavaを介して行うことができますか?

22
Tim

Javaシステムプロパティを使用して、プロキシを設定するか、コマンドラインオプションとしてプロキシを渡すことができます。

詳細とサンプルを見つけることができます here

例:接続を開く前に

_System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");
_

または、システムで設定されたデフォルトのネットワークプロキシを使用できます

_System.setProperty("Java.net.useSystemProxies", "true");
_

Java 1.5)から、プロキシのインスタンスを作成し、openConnection()メソッドに渡すことができます。

_Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();
_

または lisak が示唆するように、ニーズをよりよくサポートするサードパーティライブラリを使用できます。

47
Arun P Johny

または、 HttpClient を使用することもできます。ドキュメントをご覧ください。簡潔で非常に有益です。

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpHost proxy = new HttpHost("someproxy", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
10
lisak
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

これは私のために働いた。特定の接続または転送にプロキシを使用できました。以前は、システムレベルで設定するSystem.setPropertyを使用していましたが、内部/外部のすべての要求は同じプロキシの使用を開始しました。

また、Proxy.Type.HTTPはhttpとhttpsの両方で機能します

0
Shashank