Максимальная длина REST запроса в Retrofit

97
04 июня 2021, 19:30

Есть следующий интерфейс

@Streaming
    @Headers({"Content-Type: application/x-www-form-urlencoded","Authorization: Bearer token"})
    @POST("speech/v1/tts:synthesize")
    Observable<ResponseBody> getSpeechOgg(@Query("text") String text, @Query("emotion") String emotion);

В параметре text необходимо передавать текст длиной не более 5000 символов (Требование Яндекс.Облака). Однако, ещё даже не приблизившись к этому лимиту ~2000 символов при отправке REST запроса я получаю следующую ошибку

D/OkHttp: <-- HTTP FAILED: okhttp3.internal.http2.ConnectionShutdownException
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err: okhttp3.internal.http2.ConnectionShutdownException
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http2.Http2Connection.newStream(Http2Connection.java:248)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http2.Http2Connection.newStream(Http2Connection.java:231)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http2.Http2Codec.writeRequestHeaders(Http2Codec.java:117)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:50)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:225)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at okhttp3.RealCall.execute(RealCall.java:92)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at retrofit2.OkHttpCall.execute(OkHttpCall.java:180)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:42)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at io.reactivex.Observable.subscribe(Observable.java:12267)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at io.reactivex.Observable.subscribe(Observable.java:12267)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-17 20:36:01.567 trelico.ru.allcastmvvm W/System.err:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
08-17 20:36:01.568 trelico.ru.allcastmvvm W/System.err:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
08-17 20:36:01.568 trelico.ru.allcastmvvm W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
08-17 20:36:01.568 trelico.ru.allcastmvvm W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
08-17 20:36:01.568 trelico.ru.allcastmvvm W/System.err:     at java.lang.Thread.run(Thread.java:818)

При меньшем количестве символов все обрабатывается совершенно нормально.

Answer 1

query передаются в адресной строке, которая в свою очередь имеет ограничение длины.
Но судя по коду вы хотите отправить форму, а это делается чуть иначе:

@Streaming
@Headers("Authorization: Bearer token")
@FormUrlEncoded
@POST("speech/v1/tts:synthesize")
Observable<ResponseBody> getSpeechOgg(@Field("text") String text, @Field("emotion") String emotion);
READ ALSO
В RecyclerView криво масштабируются изображения

В RecyclerView криво масштабируются изображения

В RecyclerView ,макет которого состоит из текста + изображения некоторые ImageView криво располагаютсяКак я понял, это связано с RecyclerView, т

131
Получить список ребер между двумя вершинами графа

Получить список ребер между двумя вершинами графа

Нужно реализовать метод getPath так чтобы он возвращал список ребер, путь не обязательно должен быть оптимальным, но должно учитываться isDirected...

118
Есть желание написать клиент серверное приложение чат для Android

Есть желание написать клиент серверное приложение чат для Android

Само приложение хотелось бы создавать на Android studioПрошу подсказать с технологиями, которые стоит использовать в создании (напр

219