在 java 播放框架 http 请求中设置内容长度 header

Set content length header in java play framework http request

我正在使用 play 2.5.x ws library 用于将文件上传到内部服务器。 我有使用 apache http/curl/postman 的示例代码。 但是当我尝试使用 ws 库时,它是如何失败的。 我无权访问内部服务器并且它没有返回任何错误消息

我检查了来自两个请求(apache http/play WS)的请求 headers,我看到 "Content length " header WS 请求中缺少。 我试着用

设置它
ws.url(url).setHeader().post(Source.from(Arrays.asList(fp,name)

但我得到

"Stream has already been consumed and cannot be reset"

有什么方法可以设置内容长度吗?。 或者还有什么我想念的。

不幸的是,这没有正确记录,但您可以look at the code了解post(Source)的工作原理:

// If the body has a streaming interface it should be up to the user to provide a manual Content-Length
// else every content would be Transfer-Encoding: chunked
// If the Content-Length is -1 Async-Http-Client sets a Transfer-Encoding: chunked
// If the Content-Length is great than -1 Async-Http-Client will use the correct Content-Length

-1 是默认值。

因此,目前,由您来设置 Content-Length 或让您的服务器接受分块传输。