Android Java:从HttpUrlConnection获取响应主体

时间:2017-08-14 11:52:41

标签: java android character-encoding httpurlconnection httpresponse

我有一个HttpUrlConnection,我可以从中获得回复Headers,如下所示:

How to read full response from HttpURLConnection?

但是我已经尝试了很多方法来获得响应Body但没有成功。例如:

br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
return sb.toString();

或者

Other ways... (With UTF-8 Encoding and ...)

问题是结果包含无效字符。例如,如果响应是图像,我就无法获得正确的图像,并且它包含无效字符:

正确图片:

‰PNG


IHDR  è  £   ؟£?b       pHYs     ڑœ  
OiCCPPhotoshop ICC profile  xع‌SgTSé=÷قôBKˆ€”KoR RB‹€‘&*!   Jˆ!،ظQءEEب ˆژژ€ŒQ,ٹ

不正确图片:(我从响应机构获得的内容)

<>�t:�t�R���k�ҥ��c�ƍZ�n�6mڤW^y���
6���/׼y�1���B��������ƍ;
�˖-�'�|�+V��h�Z�e�3����%%%)--M�����/��   � �}h��m6�JKK��Oh�����㏽�QWW���T%&&*++��s���ph���III�<�%%%)<<�#�),,L+V����ý����TII����x�b=��*--�Z���M�2�l�nt�ө��|�{�z��ǵe���<??_�g�VVV���={��?^�|��wF����<͟?_���gmP:  �:� �C�|���t�R���r:�z������{}���B���k���o�$
>\���^�?!!Ak׮լY�$�j�%Wq�ݮu��i���r:�

如何从HttpUrlConnection 获取具有正确字符(格式,编码和...)的任何更改的响应正文?

1 个答案:

答案 0 :(得分:2)

如果正文是PNG图像,它将是二进制数据,您应该使用输入流,而不是读者。

更新:

示例:将图像存储在文件“myimage.png”中:

try (InputStream in = conn.getInputStream();
        OutputStream out = new FileOutputStream("myimage.png")) {
    byte[] buf = new byte[4096];
    int n;
    while ((n = in.read(buf)) > 0) {
        out.write(buf, 0, n);
    }
}