0

AndroidプロジェクトでOAuth2を使用しています。アイデアは、ThreadSafeClientConnManagerで使用されるシングルトンHttpClientを使用することです。

サーバーへの通常のリクエストでは、Authorizationヘッダーを作成して送信します。ヘッダーは、サーバーから受信した値から構成されます。これは正常に機能します。ただし、15分ごとに、ヘッダーを作成するためにサーバーから新しい値を取得する必要があります。これらの値を受け取るには、そのようにクレデンシャルを設定する必要があります。

client.getCredentialsProvider().setCredentials(
        new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
        new UsernamePasswordCredentials(creds.clientId, creds.clientSecret));

これを機能させるには、新しいDefaultHttpClientを設定する必要があります。元のシングルトンhttpclientを使用すると、いくつかのエラーが発生します。私の質問は..この1つのリクエストでのみ使用されるようにクレデンシャルを設定することは可能ですか?

AuthScopeがあることに気づきました。ホストとポートはこれには適していませんが、おそらくレルムは適していますか?レルムとは何か、またはその使用方法を教えてくれるものは何も見つかりません。

06-05 10:12:55.969:W / System.err(23843):org.apache.http.NoHttpResponseException:ターゲットサーバーが応答できませんでした06-05 10:12:55.969:W / System.err(23843): org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:85)06-05 10:12:55.969:W / System.err(23843):org.apache.http.impl.ioで。 AbstractMessageParser.parse(AbstractMessageParser.java:174)06-05 10:12:55.969:W / System.err(23843):org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179)06-05 10:12:55.969:W / System.err(23843):org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)06-05 10:12:55.969:W / System.err (23843):org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)06-05 10:12:55.975:W / System.err(23843):org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W / System.err(23843):org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)06-05 10:12:55.975:W / System.err(23843):org.apache.http .impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient。 java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12: 55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)err(23843):org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W / System.err(23843):org.apache.http.protocol .HttpRequestExecutor.execute(HttpRequestExecutor.java:121)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12:55.975:W / System.err(23843):org.apacheで.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)err(23843):org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W / System.err(23843):org.apache.http.protocol .HttpRequestExecutor.execute(HttpRequestExecutor.java:121)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12:55.975:W / System.err(23843):org.apacheで.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W / System.err(23843):org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)06-05 10: 12:55.975:W / System.err(23843):org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975:W / System.err(23843) ):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl。 client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) )。doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W / System.err(23843):org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)06-05 10: 12:55.975:W / System.err(23843):org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975:W / System.err(23843) ):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl。 client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) )。execute(HttpRequestExecutor.java:121)06-05 10:12:55.975:W / System.err(23843):at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)06-05 10:12:55.975:W / System.err (23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12:55.975:W / System.err(23843):org.apache.httpで。 impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)execute(HttpRequestExecutor.java:121)06-05 10:12:55.975:W / System.err(23843):at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)06-05 10:12:55.975:W / System.err (23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12:55.975:W / System.err(23843):org.apache.httpで。 impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12: 55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)java:555)06-05 10:12:55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)06-05 10:12: 55.975:W / System.err(23843):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

それで、さらにテストした後、私は問題がどこにあるかを見つけました。

そのようにプールされた接続マネージャーを構成したい

SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(
        new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(
        new Scheme("https", PlainSocketFactory.getSocketFactory(), 443));


ClientConnectionManager conManager = new ThreadSafeClientConnManager(new BasicHttpParams(), schemeRegistry);
    DefaultHttpClient httpClient = new DefaultHttpClient(conManager, new BasicHttpParams());

しかし、このように構成すると、上記のエラーが発生します。私がそのように通常のデフォルトのhttpclientを使用する場合

 DefaultHttpClient httpClient = new DefaultHttpClient();

その後、正常に動作します。何か案は?

4

1 に答える 1

0

1 つの要求には基本的な認証資格情報が必要であり、呼び出すと明らかにsetCredentials()エラーが発生するため、資格情報プロバイダーをまったく使用せずsetHeader()、必要な場合にのみ (要求で使用して) 基本認証ヘッダーを手動で設定することをお勧めします。

編集: スレッドセーフな共有 HttpClient インスタンスを作成する方法は次のとおりです。

 DefaultHttpClient createHttpclient(int timeout) {
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setContentCharset(params,
                HTTP.DEFAULT_CONTENT_CHARSET);
        HttpConnectionParams.setConnectionTimeout(params, timeout);
        HttpProtocolParams.setUserAgent(params, "MyApp/1.0");
        ConnPerRoute connPerRoute = new ConnPerRouteBean(10);
        ConnManagerParams.setMaxConnectionsPerRoute(params, connPerRoute);
        ConnManagerParams.setMaxTotalConnections(params, 20);

        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("http", PlainSocketFactory
                .getSocketFactory(), 80));
        final SSLSocketFactory sslSocketFactory = SSLSocketFactory
                .getSocketFactory();
        schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
        ClientConnectionManager cm = new ThreadSafeClientConnManager(params,
                schemeRegistry);

        return new DefaultHttpClient(cm, params);
    }
于 2012-06-05T02:44:37.923 に答える