我对此感到困惑,所以我想我会问一下,以防你们中的任何人遇到它,因为 HttpClient 开发有点像一门艺术。
我面临的问题是:一个应用程序正在使用 Apache HttpClient Java 库与同一公司网络中的服务器进行通信。大多数时候它可以正常工作,但有时我们会看到由于响应不完整而导致的大量异常:它们都缺少结束标记的最后三个字符,因此客户端中的解析器会抱怨。这可能会持续 5 到 10 分钟,然后消失。
我无法在本地复制此问题,并且我已验证响应完全由服务器编写。客户端通过 PostMethod 的 getResponseBodyAsStream() 方法获取响应内容,但只调用了一次。也许它需要循环调用此方法,直到它在响应被缓冲的极少数情况下为空?
我会很感激任何意见。
编辑:服务器正在写入内容长度标头并正确刷新,在客户端,数据被读入字符串:
//method is a PostMethod, client is a HttpClient
client.executeMethod(hostconfig, method);
InputStream is = method.getResponseBodyAsStream();
String response = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) > 0) {
bos.write(buf, 0, len);
}
response = new String(bos.toByteArray(), "UTF-8");
} ... // closing try block