gpt4 book ai didi

Java HttpClient 或 PostMethod 将返回数据截断为 64k

转载 作者:行者123 更新时间:2023-11-29 08:13:24 26 4
gpt4 key购买 nike

我正在使用 Apache Commons HttpClient 从服务器获取一些数据。我的问题是返回的 XML 数据总是被截断为前 64k。我希望这可能只是对相关对象设置限制的情况,但显然不是——或者至少,我找不到关于这种方法的任何信息。我假设这是一个客户端问题,因为服务器属于另一家公司,并且大概可以为其他人提供良好的数据。

有什么想法吗?

顺便说一句,我的代码 super 简单:

protected String send(Server server, String query) throws Exception {
PostMethod post = new PostMethod(server.getUrl());
post.setParameter("XMLString", query);
try {
client.executeMethod(post);
return post.getResponseBodyAsString();
} finally {
post.releaseConnection();
}
}

仅供引用,使用 InputStreams 而不是 getResponseBodyAsString() 方法的以下代码会发生同样的事情。

protected String send(Server server, String query) throws Exception {
PostMethod post = new PostMethod(server.getUrl());
post.setParameter("XMLString", query);
try {
client.executeMethod(post);
InputStream stream = post.getResponseBodyAsStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line = null;
StringBuilder sb = new StringBuilder();
while ( (line=reader.readLine()) != null ) {
sb.append(line);
}
return sb.toString();
} finally {
post.releaseConnection();
}
}

那么,您知道某处是否设置了限制吗?字符串是响应的事实总是 64k 似乎确实表明必须存在。但是在哪里?!

谢谢

阿拉斯泰尔

最佳答案

错误:64k 的限制是错误的。它在 eclipse 调试器的人工制品中不会显示,它似乎是截断的罪魁祸首。

解决方案:我现在的代码如下:

PostMethod post = new PostMethod(server.getUrl());
post.setParameter("XMLString", query);
post.setRequestContentLength(PostMethod.CONTENT_LENGTH_AUTO);
post.setStrictMode(true);
try {
client.executeMethod(post);
return post.getResponseBodyAsString();
} finally {
post.releaseConnection();
}

我承认我不知道为什么会这样,但推测这与内容长度设置有关。

另外,请注意这些方法已被弃用,我使用它们只是因为我在遗留系统上工作。如果您正在开发适应性更强的系统,我建议您遵循@HellGhost 的建议。

关于Java HttpClient 或 PostMethod 将返回数据截断为 64k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445763/

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