我的目标是使用 Android 4.0 的 REST Web 服务HttpsURLConnection
。POST
除非我尝试做某事,否则这很好用。这是相关的代码部分:
connection.setDoOutput(true);
connection.setChunkedStreamingMode(0);
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializeObjectToStream(out, object);
byte[] array = out.toByteArray();
connection.getOutputStream().write(array, 0, array.length);
这会引发以下异常:
java.net.HttpRetryException: Cannot retry streamed HTTP body
通过调试,我意识到我通过的输出流connection.getOuputStream()
是类型的ChunkedOutputStream
,并且通过挖掘 Android 源代码,我发现如果需要重试请求(无论出于何种原因),它会触发上述异常,因为它发现它没有使用RetryableOutputStream
它想要的 a 。
现在的问题是:如何让我的 HttpsURLConnection 返回这样的 RetryableOutputStream,或者更确切地说,如何正确防止分块请求编码?我以为我已经这样做了setChunkedStreamingMode(0)
,但显然情况并非如此......
[编辑]
不,实现java.net.HTTPUrlConnection
忽略 0 或更低的流模式:
public void setChunkedStreamingMode(int chunkLength) {
[...]
if (chunkLength <= 0) {
this.chunkLength = HttpEngine.DEFAULT_CHUNK_LENGTH;
} else {
this.chunkLength = chunkLength;
}
}