問題タブ [okhttp3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
10190 参照

android - オーディオ ファイルの okhttp3 MediaType.parse メソッドのパラメーターとして何を指定できますか?

RequestBody を使用して Android を使用して画像をアップロードするには、MediaType.parse("image/jpeg") を使用できることがわかりました。

しかし、オーディオ ファイルのパラメータは何でしょうか?

ご回答ありがとうございます。

0 投票する
1 に答える
1274 参照

android - レトロフィットによる Android ログイン認証

ユーザー名とパスワードを取得する LoginActivity があります。POST Retrofit 2 と OkHTTP を使用して認証トークンを受信しようとしています。改造アダプターと OkHttp クライアントを構築するサービスを作成しました。インターフェイスはありますが、ここから問題が始まります。

FormEncodedURL の資格情報 (ログインからのユーザー名とパスワード) をバックエンドに投稿して、AccessToken と呼ばれる POJO を持っているトークンを受け取る必要があります。コールバックメソッドなどでこれを正しく行っているかどうかは本当にわかりません.

URL はhttp://xxxxxxxxxxxxxxxx/token/username=smcnary%40metrostudy.com&password=xxxxxx&grant_type=passwordのようにする必要が あります。

私はAndroid開発にかなり慣れておらず、積み上げられているため、この投稿を支援するために他に必要なものがある場合はお知らせください。

私の POST 呼び出しは次のようになります。

ユーザーモデルは次のとおりです。

AccessToken モデルは次のとおりです。

LoginActivity のロジックは次のとおりです。

0 投票する
1 に答える
277 参照

android - 2 つのキャッシュを持つ 2 つの OkHttpClient - 奇妙な動作

私のアプリには現在OkHttpClient、次の目的で使用されるもの (v3.2.0) があります。

  1. レトロフィット
  2. ピカソ
  3. クラウド メディア サービスへの画像/動画のアップロード
  4. 使用するHttpDataSourceビデオ用ExoPlayer(実装はこちら)

OkHttpClientsRetrofit とメディアのユース ケースを別々に使用したい理由は次のとおりです。

  1. キャッシュを分けておきたい
  2. メディアには、レトロフィットのものにはないOkHttpClient特定のものがありますInterceptors

変更を行った後、各インスタンスにOkHttpClient独自のCache;を提供します。どちらもアプリのキャッシュ ディレクトリにあり、1 つは directory を使用し、httpもう 1 つは を使用しmediaます。両方のインスタンスは同じように設定されます (同じ と を使用しCookieJarますInterceptorsBuilders唯一の違いは、Cacheそれらに渡される異なるインスタンスがあることです)。キャッシュはピカソと完全に連携しますが、OkHttpDataSource.

渡される URL はOkHttpDataSource、クラウド メディア サービスにリダイレクト (302) するアプリケーション サーバーのエンドポイントです。これは、画像/ピカソに使用するのと同じプロセスであり、正常に機能します。

キャッシュの基本的なテスト手順は次のとおりです。

  1. を使用しOkHttpDataSourceてビデオを再生します (私のアプリケーション サーバーは正しいキャッシュ ヘッダーを送り返します)。
  2. アプリを FC して再度開く
  3. デバイスを機内モードにする
  4. を使用しOkHttpDataSourceてビデオを再生します (インターネット接続がない場合でも再生する必要があります)。

私が1つを使用すると、OkHttpClientすべて正常に動作します。上記のように 2 つのインスタンスを使用すると、アプリケーション サーバーからの応答がキャッシュされます (302) が、Locationヘッダーを解決しようとするIOExceptionと、アドレスを解決できないというメッセージがスローされます。繰り返しますが、これは、 のインスタンスを 1 つしか使用しない場合には発生しませんOkHttpClient。さらに、インスタンスが 2 つある場合、Retrofit インスタンスを に使用するOkHttpDataSourceと、キャッシュが正常に機能します。

デバッグで何が起こっているのかを把握しようとしていましたDiskLruCacheが、デバッガーを接続していると副作用があるようで、苦労していました。私が観察できたのは、リダイレクトされた URL のキャッシュ エントリDiskLruCache.Entry.readableが常に に設定されていたため、状況によっては削除されていたことfalseです。私が知る限り、これは でDiskLruCache.completeEdit呼び出されたためでしたがsuccess = false、なぜそうなったのかはわかりません。の 1 つのインスタンスのみを使用する場合OkHttpClient、または のメディア インスタンスの代わりに REST インスタンスを使用する場合も、これは問題ではありませんでしたOkHttpDataSource

0 投票する
2 に答える
498 参照

android - Android Volley が、OkHttp3 をトランスポートとして使用する特定のリクエストのキャッシュを無効にできない

特定のボレー リクエストのキャッシュを無効にする方法をいくつか試しましたが、アプリは常にキャッシュ データを使用しています。header("Cache-Control: no-store,no-cache, must-revalidate");フィードヘッダーにあります。Android Studio から複数のテストを開始しましたが、フィードのタイムスタンプは Logcat で同じままです。

リクエストを行う前にstringRequest.setShouldCache(false);キャッシュを 追加してクリアしましたが、機能しません。queue.getCache().clear();

活動クラス:

CustomVolleyRequestQueue クラス:

okHttpRequestBuilder.cacheControl(CacheControl.FORCE_NETWORK);OKHTTPスタッククラスでも試してみましたが、関係があるかどうかを確認しましOkHttp3たが、違いはありません:

0 投票する
1 に答える
1858 参照

retrofit - OkHttpClient.Builder Interceptor がレトロフィット 2 に追加され、条件が false であっても

acesstokenがnullでない場合にのみ、すべてのリクエストにaccestokenのインターセプターをアタッチするレトロフィットアダプターがありますが、インターセプターはすべてのリクエストにアタッチされています。

私のリクエストは次のとおりです。

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

}

0 投票する
1 に答える
675 参照

java - URL パス パラメータのエンコード

レトロフィットによるパスパラメータのエンコーディングに苦労しています:

  • http://localhost:8080/nuxeo/api/v1私のベースURLです。
  • 私はこの電話を持っています@GET("path/{documentPath}") Call<Document> fetchDocumentByPath(@Path("documentPath") String docPath);

  • パラメータとして、次のように設定しています。default-domain/blabla

  • Tomcat アプリに対してクエリを実行すると、この回答が得られます

Response{protocol=http/1.1, code=400, message=Bad Request, url=http://localhost:8080/nuxeo/api/v1/path/default-domain%2Fblabla}

  • 「パラメータをエンコードしないでください。既にエンコードされています」と言うために encode = true を入力しても、まだエンコードされています。

  • さらに、レトロフィットでは、次のアサーションを使用すると、このテストretrofit2.RequestBuilderTest#getWithEncodedPathParamは機能しません。Request request = buildRequest(Example.class, "po/ng");assertThat(request.url().toString()).isEqualTo("http://example.com/foo/bar/po/ng/");

セキュリティ上の理由から、Tomcat は URL 検証を制限しています: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0450

そのため、%2F でエンコードせずに、パス パラメータで「/」を直接送信したいと考えています。どうすれば達成できますか?

ありがとうございました!

0 投票する
1 に答える
6121 参照

android - OkHttp3 を使用して MultipartBody を送信する

サーバーと通信する必要がある Android アプリを作成しています。OkHttp3 が使用する MultipartBody を作成するのに苦労しています。私のコードは次のようになります。

これは、誰もが使用するほぼ標準的なコードです。サーバーはリクエストを受け取りますが、リクエストから MultipartBody を取得できません。マルチパートボディを印刷すると、次のようになります。

私の質問は次のとおりです。なぜ私のデータが含まれていないのですか?ライブラリがありませんか (gradle にコンパイル 'com.squareup.okhttp3:okhttp:3.2.0' を含め、MultipartBody がこのライブラリの一部であると想定しています)? MultipartBody はどのように見えるはずですか?

FormBody も送信してみましたが、同じように見えます。