1

apache commons 3.1 を使用して、プロキシをサポートする httpClient を実装しています。プロキシ経由でリモート ホストに接続しようとしています。プロキシ サーバーは認証なしで構成されていますが、リモート ホストは認証付きで構成されています。プロパティ ファイルを介してプロキシ パラメータを渡すと、実行中に警告が表示されます。

警告 - BASIC @xx.xx.xx.xx では必要なプロキシ資格情報が利用できません 警告 - プリエンプティブ認証が要求されましたが、デフォルトのプロキシ資格情報が利用できません

しかし、実行は進んでいます。

一方、JVM 引数を介してプロキシ パラメータを渡すと、再び同じ警告が表示され、実行が停止します。

この動作に特定の理由はありますか? プロパティー・ファイルと JVM arg を介してプロキシー・パラメーターを渡すことに違いはありますか?

コードは次のとおりです。

if(System.getProperty("http.proxyHost") != null && System.getProperty("http.proxyPort") != null) {
            httpClient.getHostConfiguration().setProxy(System.getProperty("http.proxyHost"), Integer.parseInt(System.getProperty("http.proxyPort")));
        }
        else if(AMXAdminTask.props.getProperty("http.proxyHost") != null && AMXAdminTask.props.getProperty("http.proxyPort") != null) {
            httpClient.getHostConfiguration().setProxy(Propfile.props.getProperty("http.proxyHost"), Integer.parseInt(Propfile.props.getProperty("http.proxyPort")));
        }
4

1 に答える 1

0

2 つの非常に異なるものを組み合わせようとしているように見えます。上記のコードはプロキシを適切に通過させますが、リモート ホストには BASIC 認証が必要です。以下の例では、Jersey クライアント (RESTful 呼び出しを行うために既存のプロジェクトで使用されています) を使用していますが、何をする必要があるかを理解する必要があります。Apache HttpComponents の使用に行き詰まっている場合は、これを見てください: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html

import org.apache.commons.lang.StringUtils;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import com.sun.jersey.client.apache.ApacheHttpClient;
import com.sun.jersey.client.apache.config.ApacheHttpClientConfig;
import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig;

public abstract class BaseProxyProvider {
    protected Client getHttpClient() {
        final DefaultApacheHttpClientConfig cc = new DefaultApacheHttpClientConfig();
        if (StringUtils.isNotEmpty(System.getProperty("http.proxyHost"))) {
            cc.getProperties()
                    .put(ApacheHttpClientConfig.PROPERTY_PROXY_URI,
                            "http://" + System.getProperty("http.proxyHost") + ":"
                                    + System.getProperty("http.proxyPort") + "/");
        }
        Client c = ApacheHttpClient.create(cc);

        c.addFilter(new HTTPBasicAuthFilter(WebAppPropertyReader.getProperties().getProperty(
                WebAppPropertyReader.SERVICE_USER), WebAppPropertyReader.getProperties().getProperty(
                WebAppPropertyReader.SERVICE_PASSWORD)));
        return c;
    }
}
于 2012-11-02T16:58:10.940 に答える