我的目标是从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;
}
}