【发布时间】:2009-07-31 20:27:22
【问题描述】:
我对此感到困惑,所以我想我会问一下,以防你们中的任何人遇到它,因为 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
【问题讨论】:
-
编辑:与许多难以发现的错误一样,问题似乎与特殊字符有关(欧洲重音字符、德语 long-s 等)。一旦消息被规范化以删除这些字符,错误就停止了。
-
有类似的问题。完全相同的网址。使用浏览器/Curl 给我完整的数据。但是,Httpclient 得到不完整的输出......!
标签: java http httpclient