OkHttp RequestBody返回错误的内容长度

时间:2015-09-18 08:50:49

标签: java android rest okhttp

我有这个应用程序,我使用OkHttp RequestBody来执行与body的网络请求,但返回的内容长度是完全错误的。作为问题的一个例子,有这种情况:

    public static RequestBody createNewTokenBody(final String redirectUri, final String
        code,
                                             final String clientId, final String
                                                     clientSecret) {

    final byte[] requestBody = "bunchofcharsthatshouldgointhebody".getBytes(Charset.forName("UTF-8"));

    final RequestBody ret = RequestBody.create(MediaType.parse(MEDIA_TYPE), requestBody, 0,
            requestBody.length);

    try {
        Log.d("debug", "Request body length to return: " + ret.contentLength());
    } catch (IOException e) {
        e.printStackTrace();
    }

    return ret;
}

所以这将打印“请求体长返回:33”。 然而,当下面的拦截器捕获此主体附加的请求时:

    client.networkInterceptors().add(new Interceptor() {
        @Override
        public Response intercept(final Chain chain) throws IOException {
            final Request request = chain.request();

            final RequestBody body = request.body();
            if (body != null) {
                Log.d("debug", "REQUEST BODY LENGTH: " + body.contentLength());
            }

            return chain.proceed(request);
        }
    });

“REQUEST BODY LENGTH:2”会被记录,无论我指定的内容是什么。不用说,这完全搞砸了请求,因为身体没有完全读取。有人知道这种行为背后的原因吗?

2 个答案:

答案 0 :(得分:0)

我无法在独立的测试用例中重现这一点。如果可以的话,请使用最小的可执行测试用例报告针对OkHttp的错误,以证明问题。

答案 1 :(得分:-1)

如果需要将来参考,这被报告为Retrofit-2 beta1中的一个错误,并且已在当前快照中修复。

https://github.com/square/retrofit/issues/1097