Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpClient或PostMethod将返回数据截断为64k_Java_Apache Commons Httpclient - Fatal编程技术网

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

Java HttpClient或PostMethod将返回数据截断为64k,java,apache-commons-httpclient,Java,Apache Commons Httpclient,我正在使用ApacheCommonsHttpClient从服务器获取一些数据。我的问题是返回的XML数据总是被截断到前64k。我希望这可能只是对相关对象设置限制的一个例子,但显然不是——或者至少,我找不到关于这种方法的任何信息。我假设这是一个客户机问题,因为服务器属于另一家公司,可能会将数据提供给其他所有人 有什么想法吗 顺便说一句,我的代码非常简单: protected String send(Server server, String query) throws Exception {

我正在使用ApacheCommonsHttpClient从服务器获取一些数据。我的问题是返回的XML数据总是被截断到前64k。我希望这可能只是对相关对象设置限制的一个例子,但显然不是——或者至少,我找不到关于这种方法的任何信息。我假设这是一个客户机问题,因为服务器属于另一家公司,可能会将数据提供给其他所有人

有什么想法吗

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

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()方法时也会发生同样的情况

那么,你知道某个地方有没有限制吗?字符串is response始终为64k这一事实似乎确实表明了一定存在。但是在哪里

谢谢


Alastair

将响应库另存为字符串并返回字符串,因为在返回结果之前会调用方法
releaseConnection()

此外,您还应该考虑是否真的希望使用HtpCclipse 3 .x,因为开发已经被设置,并且它已经被HtpCclipse和HTTPCORE模块中的库HtpPotoProject替换了。 新HttpClient的一个示例使用:

HttpPost post = new HttpPost(server.getUrl());
HttpResponse response = client.executeMethod(post);
return EntityUtils.toString(response.getEntity());

将ResponseBy另存为string并返回字符串,因为在返回结果之前会调用方法
releaseConnection()

此外,您还应该考虑是否真的希望使用HtpCclipse 3 .x,因为开发已经被设置,并且它已经被HtpCclipse和HTTPCORE模块中的库HtpPotoProject替换了。 新HttpClient的一个示例使用:

HttpPost post = new HttpPost(server.getUrl());
HttpResponse response = client.executeMethod(post);
return EntityUtils.toString(response.getEntity());

勘误表: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的建议。

勘误表: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的建议。

如何初始化您的HttpClient?您是否尝试过此网站上的TIPP?你考虑过字符集吗?只是好的新旧HttpClient()。我的意思是如何构造它。如何初始化HttpClient?您是否尝试过此网站上的TIPP?你考虑过字符集吗?只是好的新旧HttpClient()。我的意思是如何构造它。我的朋友,我想更新类路径以使用当代库。然而,我的公司可能会杀了我,因为我毫无疑问会拿走一大堆有利可图但遗留下来的服务(遗憾。另外,我只想评论一下finally/return问题。finally实际上并没有中断返回行的执行,只是中断了返回的行为。只需将返回行移出try/finally块,就可以很容易地显示这一点。在这种情况下,返回值始终为null,因为此时连接已被中断已关闭。它为空,因为该方法已发布,并且所有内容都已清除。您必须在发布之前保存内容。我的朋友,我很想更新类路径以使用当代库。但是,我的公司可能会杀了我,因为我无疑会取走一批有利可图但传统的服务:(遗憾。另外,我只想评论一下finally/return问题。finally实际上并没有中断返回行的执行,只是中断了返回的行为。只需将返回行移出try/finally块,就可以很容易地显示这一点。在这种情况下,返回值始终为null,因为此时连接已被中断已关闭。它为空,因为该方法已发布,并且所有内容都已清除。您必须在执行发布之前保存内容。