0

我正在尝试使用 org.apache.httpcomponents 版本 4.23 中的 httpclient 在 scala 中执行 http 请求。特别是我想使用 InputStreamEntity 来构建请求,以避免复制内存中的大(~100Mb)字节数组。这是片段:

val req = new HttpPut(url)
req setEntity new InputStreamEntity(contentStream, -1/*contentlength*/)
val client = new DefaultHttpClient(connManager, httpParams)
val resp = client execute req

在代码中的 url、connManager、httpParams 是在别处定义的。代码的结果是在所需位置创建一个没有内容的文件。我正在使用具有 3 个字节的 contentStream 进行测试。创建 InputStreamEntity 并将内容长度作为参数明确设置为 3 将导致代码以正确的方式创建文件。出于生产中的充分理由,我不知道流的长度,因此我想使用负数来确保发送整个流,直到如 InputStreamEntity 的 api 所宣传的那样,到达流的末尾。我究竟做错了什么?为什么我在没有明确设置内容长度时得到一个空文件?

4

1 回答 1

1

不设置 content-length,会导致 HTTP Client 切换到chunked transfer-encoding

为此,您发布到的 http 服务器必须符合 HTTP 1.1。是吗 ?

于 2013-03-14T08:22:23.080 回答