使用okhttp发送post请求时,使用stream作为body


使用okhttp进行http请求时,如果post body长度未知,需要使用InputStream作为body传输数据。
okhttp没有提供类似RequestBody.create(File strean)此类快捷调用方法,需要调用者手动构造RequestBody。
参照官方样例,进行修改,如下代码:
https://square.github.io/okhttp/recipes/#post-streaming-kt-java

public static RequestBody createInputStreamRequestBody(final InputStream stream) {
    new okhttp3.RequestBody() {
        @Override
        public MediaType contentType() {
            // 设置body mime类型,这里以二进制流为例
            return MediaType.get("application/octet-stream");
        }

        @Override
        public long contentLength() throws IOException {
            // 返回-1表示body长度未知,将开启http chunk支持
            // RequestBody中默认返回也时-1
            return -1;
        }

        @Override
        public void writeTo(BufferedSink sink) throws IOException {
            try (Source source = Okio.source(stream)) {
                sink.writeAll(source);
            }
        }
    };
}

文章作者: 2356
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 2356 !