我正在尝试使用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
在代码网址中,connManager,httpParams在别处定义。代码的结果是在没有内容的期望位置上创建文件。我正在测试一个有3个字节的contentStream。创建具有内容长度作为参数设置显式为3的InputStreamEntity将导致代码以正确的方式创建文件。出于生产的原因,我不知道流的长度,因此我想使用负数来确保整个流被发送,直到达到InputStreamEntity的api所宣传的流的末尾。 我究竟做错了什么?为什么在没有明确设置内容长度时我得到一个空文件?
答案 0 :(得分:1)
未设置内容长度,将导致HTTP客户端切换到chunked transfer-encoding
为此,您要发布的http服务器必须符合HTTP 1.1标准。是吗?