6

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

それはSOCKSプロキシでも機能しますか、それとも何か違うことをしなければなりませんか?

4

5 に答える 5

6

Java は設定を介して Socks プロキシ構成をサポートします。

  • socksProxyHostSOCKS プロキシ サーバーのホスト名
  • socksProxyPortポート番号のデフォルト値は1080

例えば

java -DsocksProxyHost=socks.mydomain.com

編集)あなたの例では、ソックスプロキシが前に概説した方法で構成されている場合:

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

于 2009-09-07T11:27:41.830 に答える
4

SOCKS は HttpClient 3 でネイティブにサポートされていません。他の人が提案したように、JDK で SOCKS サポートを試すことができます。副作用は、JVM 全体が同じ SOCKS プロキシを通過することです。

Java 5 は、SOCKS (タイプ 2) でのユーザー名/パスワード認証をサポートしています。オーセンティケータを次のように設定するだけです。

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password.toCharArray());
    }
});

繰り返しますが、これは JVM のすべての認証 (HTTP 認証、プロキシ認証) に影響するため、うまくいかない場合があります。

于 2009-09-07T11:56:54.950 に答える
4

Apache HTTPClientの機能ページには次のように書かれています。

ネイティブ Java ソケット サポートを使用した SOCKS プロキシ (バージョン 4 および 5) を介した透過的な接続。

「透過的」とは、特別なことをしなくても機能するという意味だと思います。SOCKS プロキシを利用できる場所はありますか? うまくいくか試してみませんか?

于 2009-09-07T11:26:54.873 に答える
3

SOCKS プロトコルを実装するカスタム ソケット ファクトリを提供し、それをデフォルトの HTTP プロトコル ハンドラとして登録できます。このソリューションには、上記の tuergeist の回答と同様の制限があります。これは、HttpClient を介して確立するすべての HTTP 接続にグローバルに適用されます。

これに問題がある場合は、こちらの対応をご覧ください。ここで、Oleg は HttpClient 4.0 の使用を提案していますが、HttpClient 3.x の HostConfiguration クラスの可能なパッチについても言及しています。

もう 1 つの考えられる解決策は、私の個人的な好みですが、socks プロキシにラッパー HTTP プロキシを書き込むことです。

于 2009-11-29T09:56:56.763 に答える
1

私は試した

System.setProperty("socksProxyHost", "socks.xyz.com");
System.setProperty("socksProxyPort", "1000");

そしてそれはうまくいっています。

于 2010-06-20T05:13:16.827 に答える