SOCKS プロキシに対して認証するように HTTPClient を設定するにはどうすればよいですか?
-
21-09-2019 - |
質問
SOCKS プロキシに対するプロキシ認証を設定する必要があります。分かりました この郵便受け 一般的な HTTP プロキシで機能するように見える指示を与えます。
httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);
HttpState state = new HttpState();
state.setProxyCredentials(new AuthScope("proxyserver.example.com", 8080),
new UsernamePasswordCredentials("username", "password"));
httpclient.setState(state);
それはうまくいきますか 靴下 プロキシも同様に使用しますか、それとも何か別のことをする必要がありますか?
解決
が特徴のApacheのHTTPClientのページ氏は述べています:
ネイティブJavaソケットサポートを使用してSOCKSプロキシ(バージョン4および5)を介して透過接続
は「透明」で、私は、彼らはそれはあなたが何も特別な操作を行うために必要とせずに動作することを意味すると思います。あなたはSOCKSプロキシ利用できるどこかにありますか?あなたはちょうどそれが動作するかどうかを確認するためにそれを試してみることができませんか?
他のヒント
Java は設定を通じて Socks プロキシ設定をサポートします。
socksProxyHost
SOCKS プロキシ サーバーのホスト名socksProxyPort
ポート番号の場合、デフォルト値は次のとおりです。1080
例えば
java -DsocksProxyHost=socks.mydomain.com
(編集) たとえば、Socks プロキシが前に概説した方法で構成されているとします。
httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);
Credentials cred = new UsernamePasswordCredentials("username","password");
httpclient.getState().setProxyCredentials(AuthScope.ANY, cred);
このバリアント (httpclient なし) を使用することもできます。
SocketAddress addr = new
InetSocketAddress("webcache.mydomain.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Type.HTTP for HTTP
したがって、前の例を完了すると、次のものを追加できるようになります。
URL url = new URL("http://java.sun.com/");
URConnection conn = url.openConnection(proxy);
HTH
SOCKSはHttpClientを3ネイティブでサポートされていません。あなたは他の人によって提案されSOCKSはJDKでサポートして試すことができます。副作用はあなたの全体のJVMが同じSOCKSプロキシを介して行くことです。
SOCKSでJava 5のサポートユーザー名/パスワード認証(タイプ2)。あなたがしなければならないのは、セットアップには、このような認証システムで、
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});
もう一度、あなたのために、このかもしれない仕事は、それはあなたのJVMですべての認証に影響を与えるため、(HTTP認証、プロキシ認証)。
あなたはSOCKSプロトコルを実装するカスタムソケットファクトリを提供し、あなたのデフォルトのHTTPプロトコルハンドラとして登録することができます。このソリューションは、上記tuergeistの答えにも同様の制限があります持っている - それはあなたがHttpClientを経由確立するだろう任意のHTTP接続に、世界的に適用されます。
この
あなたはこの問題を見つける場合は、=「http://old.nabble.com/Best-practise-to-add-SOCKS-proxy-support--td25107866.html」のrel = "nofollowをnoreferrer
私の個人的な好みであるもう1つの可能な解決策は、SOCKSプロキシへのラッパーHTTPプロキシを書くことです。
私が試した
System.setProperty("socksProxyHost", "socks.xyz.com");
System.setProperty("socksProxyPort", "1000");
と、それが正常に動作しています。