使用HttpClient 4.1解码分块数据

时间:2012-08-21 15:09:24

标签: java apache-httpclient-4.x chunked-encoding chunked http-chunked

我正在使用HttpClient向服务器发送一个应该返回xml数据的请求。该数据作为分块数据返回。然后我尝试将收到的xml数据写入文件。我使用的代码如下所示:

    HttpEntity entity = response.getEntity();
    InputStream instream = entity.getContent();

        try {
            // do something useful
            InputStreamReader isr = new InputStreamReader(instream);
            FileWriter pw;

            pw = new FileWriter(filename, append);

            OutputStreamWriter outWriter = new OutputStreamWriter(new FileOutputStream(filename, append), "UTF-8");
            BufferedReader rd = new BufferedReader(isr);

            String line = "";
            while ((line = rd.readLine()) != null) {
                // pw.write(line);
                outWriter.write(line);
            }
            isr.close();
            pw.close();
        } finally {
            instream.close();
        }

这会导致将如下数据打印到文件中: resulting file

此代码适用于非分块数据。如何使用HttpClient正确处理分块数据响应。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

我不认为你的问题是数据的分块。

XML数据是纯文本数据 - 分块意味着它被分成几个部分,这些部分被转移到另一个部分。因此,每个块应包含可见的纯文本xml数据,显然不是数据图中所示的情况。

可能是内容是通过gzip压缩编码的,或者它不是纯文本XML而是二进制编码的XML(例如像WBXML)。

您可以从发送的服务器响应标头中看到具体类型,尤其是它包含的已使用的mime类型。