我正在尝试使用 org.apache.httpcomponents 版本 4.23 中的 httpclient 在 scala 中执行 http 请求。特别是,我想使用 InputStreamEntity 进行 put 来构建请求,以避免复制内存中的大(~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 进行测试。创建将内容长度作为参数显式设置为 3 的 InputStreamEntity 将导致代码以正确的方式创建文件。出于生产中的充分原因,我不知道流的长度,因此我想使用负数来确保发送整个流,直到达到流的末尾(如 InputStreamEntity 的 api 所通告的那样)。 我究竟做错了什么?为什么在未明确设置内容长度时会得到一个空文件?
最佳答案
不设置内容长度,将导致 HTTP 客户端切换到 chunked transfer-encoding
要实现此功能,您要发布到的 http 服务器必须符合 HTTP 1.1。是吗?
关于java - 除非我显式传递内容长度,否则使用 InputStreamEntity 通过 httpclient 构建 http put 请求将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366843/