繁体   English   中英

除非我明确地传递内容长度,否则使用InputStreamEntity通过httpclient来请求http put请求将不起作用

[英]Using InputStreamEntity for buidling a http put request with httpclient won't work unless I pass the content length explicitely

我正在尝试使用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。 创建内容长度作为参数明确设置为3的InputStreamEntity会导致代码以正确的方式创建文件。 由于生产中的充分原因,我将不知道流的长度,因此我想使用负数来确保整个流都已发送,直到InputStreamEntity的api通知到达该流的末尾为止。 我究竟做错了什么? 如果未明确设置内容长度,为什么会得到一个空文件?

未设置内容长度,将导致HTTP客户端切换到分块传输编码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM