【问题标题】:Using HttpClient 4.1 to decode chunked data使用 HttpClient 4.1 解码分块数据
【发布时间】:2012-08-16 23:30:41
【问题描述】:

我正在使用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();
        }

这会导致将如下所示的数据打印到文件中:

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

【问题讨论】:

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


    【解决方案1】:

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

    XML 数据是纯文本数据 - 分块意味着它被分成几个部分,然后依次传输。因此,每个块都应该包含可见的纯文本 xml 数据,这显然不是数据图片所示的情况。

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

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

    【讨论】:

    • 接收响应:HTTP/1.1 200 OK HTTP/1.1 200 OK 日期:2012 年 8 月 22 日星期三 08:38:16 GMT 服务器:Apache/2.2.22 (Fedora) 内容编码:gzip Keep -Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/xml
    • 我一直在玩代码,发现问题是由以下行引起的:httpget.setHeader("accept-encoding", "gzip,deflate,sdch");删除它,会生成具有正确响应的文件
    • 我不完全确定为什么删除上述标头会使代码工作。任何见解都会非常有帮助。 @Robert 谢谢你昨天的迅速回复,顺便说一句!
    • 如果客户端将accept-encoding 标头发送到服务器,如上所示,它声明它接受使用gzip、deflate 和sdch 方法压缩的内容。内容压缩是可选的,因此如果您删除请求中的标头,您将获得未压缩的内容。
    • 再次感谢您的回复。我仍然不确定为什么这不起作用。在我上面粘贴的响应头中,内容编码是gzip,所以从技术上讲,这并不意味着如果我作为客户端将accept-encoding设置为gzip,并且响应的内容编码也是gzip,那么应该没有什么问题吧?也许有什么我不明白的地方。
    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多