Codenameone 如何从CN1中的响应头获取内容长度?

Codenameone 如何从CN1中的响应头获取内容长度?,codenameone,Codenameone,我实现了响应头,但响应头不包括内容长度,即使我确保服务器专门回复该位。我还验证了CN1之外的响应,它包括内容长度。在ReadHeaders中捕获的标题的完整列表是(从Android上看):null、Alt Svc、缓存控制、连接、内容类型、日期、ETag、服务器、传输编码、Vary、X-Android-Received-Millis、X-Android-Response-Source、X-Android-Selected-Protocol、X-Android-Sent-Millis、X-Clou

我实现了响应头,但响应头不包括
内容长度
,即使我确保服务器专门回复该位。我还验证了CN1之外的响应,它包括内容长度。在
ReadHeaders
中捕获的标题的完整列表是(从Android上看):
null、Alt Svc、缓存控制、连接、内容类型、日期、ETag、服务器、传输编码、Vary、X-Android-Received-Millis、X-Android-Response-Source、X-Android-Selected-Protocol、X-Android-Sent-Millis、X-Cloud-Trace-Context、X-Powered-By
。现在要估计下载大小,我(1)调用端点以获得总大小(2)调用端点以获得实际下载并使用
NetworkManager
progress listener,但最好只使用一个请求(通过使用
Content Length
)来跟踪进度。普通的
RequestBuilder
不公开响应头,因此需要直接使用
ConnectionRequest
readHeaders
。但是
getHeaderFieldNames


注意:

这不起作用的原因是,默认情况下,Android/CN1发送一个请求,其标题为
Accept Enconding
gzip
。这将返回不包含长度标头的分块响应。我不能保证这种行为与每一个服务器响应都匹配,但在我的情况下(Node.js+Express)

要强制服务器返回非分块响应,请将标头设置为“compress”、“identity”或“deflate”

例如:

Rest.post(url).header("Accept-Encoding", "compress").fetchAsJsonMap(resp -> {...

为什么不使用
getContentLength()
?这是我第一次尝试(返回0)。最后,我用OKHTTP3实现了一个本机调用,该调用确实有效。我将复制下面的代码。。。某些内容必须与CN1的实施有所不同。也可能与不同的服务器设置有关,虽然我尝试了传输编码头的所有不同值,但仍然不起作用。我们使用此方法来显示进度指示器等。因此,我非常确定它能起作用。如果未设置该值,它将返回-1,因此如果它返回0,则表示出现了问题。URL正在重定向吗?sry,我应该说-1。它可能与我的服务器(node.js)设置有关,而不是与CN1有关。我想不出来…不。响应代码是一个标头,因此在获取实际数据之前,一旦连接,它就可用。另请参见: