SOCKS プロキシに対して認証するように HTTPClient を設定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1388822

質問

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");

と、それが正常に動作しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top