0

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

我检查了两个请求(apache http/play WS)的请求标头,我发现 WS 请求中缺少“内容长度”标头。我试着用

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

但我得到

"Stream has already been consumed and cannot be reset"

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

4

1 回答 1

1

不幸的是,这没有正确记录,但您可以查看代码以了解其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或让您的服务器接受分块传输。

于 2016-07-29T17:34:45.983 回答