我的目标是从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
并且从挖掘Androids源代码中我发现,如果需要重试请求(无论出于何种原因),它会引发上述异常,因为它会发现它是 不 用一个 RetryableOutputStream
它想要那里。
现在的问题是:如何使我的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;
}
}