Java 2.0.0:IllegalStateException:无法在没有分块编码或已知内容长度的情况下对请求正文进行流式处理

Java 2.0.0:IllegalStateException:无法在没有分块编码或已知内容长度的情况下对请求正文进行流式处理,java,okhttp,Java,Okhttp,OkHttp版本:2.0.0 我通过Google Play收到以下异常堆栈跟踪: java.lang.IllegalStateException:无法在没有 分块编码或已知内容长度!在 com.squareup.okhttp.internal.http.HttpTransport.createRequestBodyHttpTransport.java:68 在 com.squareup.okhttp.internal.http.HttpEngine.sendRequestHttpEngine.j

OkHttp版本:2.0.0

我通过Google Play收到以下异常堆栈跟踪:

java.lang.IllegalStateException:无法在没有 分块编码或已知内容长度!在 com.squareup.okhttp.internal.http.HttpTransport.createRequestBodyHttpTransport.java:68 在 com.squareup.okhttp.internal.http.HttpEngine.sendRequestHttpEngine.java:254 com.squareup.okhttp.Call.getResponseCall.java:198 at com.squareup.okhttp.Call.access$200Call.java:36 com.squareup.okhttp.Call$AsyncCall.executeCall.java:143 at com.squareup.okhttp.internal.NamedRunnable.runNamedRunnable.java:33 在 java.util.concurrent.ThreadPoolExecutor.runWorkerThreadPoolExecutor.java:1112 在 java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:587 java:848

这正是提出请求的方式:

Request.Builder requestBuilder = new Request.Builder();
requestBuilder.addHeader("User-Agent", userAgent);
requestBuilder.addHeader("Accept", "application/hal+json");
requestBuilder.url(transformedURL);

RequestBody requestBody = body == null ? null : RequestBody.create(MediaType.parse("application/json"), gson.toJson(body));
requestBuilder.method(method, requestBody);

okHttpClient.newCall(requestBuilder.build()).enqueue(new com.squareup.okhttp.Callback() { ...
起初,它似乎与有关,但它已经被修复。此外,我们在开发过程中多次测试了带有空主体的POST请求。 此应用程序仅获取和发布请求


什么可能导致此错误?

您是如何创建HTTP请求的?如果您可以创建一个可复制的测试用例,请使用OkHttp提交一个bug,我们将进行修复。

此异常是由以下代码引发的:

包okhttp3.internal.http

Http1xStream.java

为了解决这个问题,我需要向请求中添加一个标头,可以这样添加:.addHeaderTransfer Encoding,chunked:

OP的样本:

Request.Builder requestBuilder = new Request.Builder();
requestBuilder.addHeader("User-Agent", userAgent);
requestBuilder.addHeader("Accept", "application/hal+json");
requestBuilder..addHeaderTransfer编码,分块


谢谢你,杰西。我刚刚在上面添加了请求创建。我还没有设法复制它。到目前为止,它只被报道过一次,发布后两周,有几百个用户。你不应该在帖子中使用空正文。那应该能解决你的车祸。我会尽量让OkHttp早点抱怨的!我认为这不是问题所在。这同一个应用程序已经有好几个星期在空荡荡的身体上发出POST请求了,并且工作得很好。此外,我在HTTP RFC上找不到一个POST请求规则所需的主体:正如我所怀疑的,POST请求上的空主体是有效的,正如HTTP RFC第3.3.2节所建议的:例如,内容长度标头字段通常在POST请求中发送,即使该值为0表示有效负载为空。当设备无法连接到代理服务器时,我似乎收到此错误。您找到原因了吗?我遇到了同样的问题,但仍然不知道根本原因,因为我以前成功地使用了相同的代码。
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.addHeader("User-Agent", userAgent);
requestBuilder.addHeader("Accept", "application/hal+json");
requestBuilder.url(transformedURL);