gpt4 book ai didi

java - 使用 Apache HttpClient 3.0.1 的间歇性不完整响应

转载 作者:可可西里 更新时间:2023-11-01 16:19:55 26 4
gpt4 key购买 nike

我对此感到困惑,所以我想我会问问大家是否遇到过它,因为 HttpClient 开发有点像一门艺术。

我面临的问题是:应用程序正在使用 Apache HttpClient Java 库与同一公司网络中的服务器通信。大部分时间它都没有问题,但有时我们会看到由不完整响应引起的一连串异常:它们都缺少结束标记的最后三个字符,因此客户端中的解析器会报错。这可能持续 5 到 10 分钟,然后消失。

我无法在本地复制这个问题,我已经验证了响应完全由服务器写入。客户端正在使用 PostMethod 的 getResponseBodyAsStream() 方法获取响应内容,但只调用了一次。也许它需要循环调用此方法,直到它在缓冲响应的罕见情况下变为 null 为止?

我将不胜感激。

编辑:服务器正在写入内容长度 header 并正确刷新,在客户端,数据被读入字符串:

//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

最佳答案

来自服务器的内容长度 header 是否设置正确?我不是 100% 确定 Commons-HttpClient 是否尊重这些,但它很容易做到。我想不出您需要重复调​​用 getResponseBodyAsStream 的任何原因。

也可以想象,您用于读取流的代码做出了错误的假设。也许我们可以看到您如何读取数据的片段,以确保您实际上正确读取了整个流?一些常见的编码错误可能导致只能读取缓冲量(这将导致看似随机的失败)。

除此之外,很难说......我们经常使用 Commons HttpClient,没有类似的症状。

关于java - 使用 Apache HttpClient 3.0.1 的间歇性不完整响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com