java - 除非我显式传递内容长度,否则使用 InputStreamEntity 通过 httpclient 构建 http put 请求将不起作用

标签 java scala httpclient

我正在尝试使用 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/

相关文章:

scala - Scala,Actor,未读收件箱邮件会如何处理?

c# - 仅用于路径的 Uri 生成器

Android HttpClient内存泄漏?

java - ResultSet 到数据库 SQL 查询的不同值的比较

java - 字符串的分隔符由多个正则表达式组成

algorithm - Scala 函数式快速排序

c# - 如何调用具有多个参数的 Post api

java - 无法绘制正确的线性图,其中 X 是日期时间戳

java - 无法解析或不是字段

programming-languages - 企业级Scala