gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:46:48 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com