2017-08-23 5 views
1

私は、アプリケーションクラスに自分のOkHttpを構築し、それに静的な参照を保持しています。このように、私はいつでもOkHttpのインスタンスを1つ持っています。異なる設定のOkhttp

okHttpClient = new OkHttpClient.Builder() 
       .cache(new Cache(context.getCacheDir(), 50 * 1024 * 1024)) 
       .addInterceptor(new HttpInterceptor()) 
       .build(); 

は今、私は他のリクエストURLにパラメータとして供給されたAPIキーと秘密を必要としながら、一つはのOAuth2を必要とし、要求の2種類を作っています。私はOAuth2を要求する要求に対してusing an interceptorです。

したがって、後者の要求では、傍受者が認証のためにリゾートを使用するため、リクエストが失敗するという問題があります。私はそれを "見て、この要求のために迎撃者を無視する"と言うことができる方法はありますか?または、私はOkHttpClientの2つのインスタンスが必要ですか?

答えて

1

単一インスタンスのWitインターセプタを作成した後で、インターセプタを無視しないため、2つのインスタンスが必要になります。 ハックは、インターセプタ内のURLを識別し、そのリクエストに対するインターセプタの動作を無視することができます。

1

最もクリーンな解決策は、1つのOkHttpインスタンスを持つことですが、インターセプタには認証方法を決定するロジックがあります。

この例では、ServiceInterceptor.javaは各要求をチェックし、プラグイン可能な方法で認証する方法を決定します。あなたは何か似たようなことができます。

接続は、例えば複数のホストのために合体させることができることをキュータ

  • 可能性の

    • 再利用など、さまざまなクライアントに対するこのアプローチの多くの利点がありますwww.mysvc.comとapi.mysvc.com
    • ホスト間のリダイレクトのサポート
  • 関連する問題