0

DefaultHTTPClientAndroid を使用してページを取得し、 Jsoup を使用して解析しようとしています。<body>および</body>タグ内のすべての HTML が何かにエンコードされているという、非常に奇妙な応答が返されます。

<html>
  <head></head>
  <body>
       ��������������Y�#I�&amp;amp;�\�+��*;����/U���53�*��U�=�D�I:I� ����X�����΃��=H��2�`Ѓ  ��o��nͽ�C瘹;�l2Y�I_l�����;f��W�k��o2.����?�r&gt;��œ�qYξ&lt;&lt;&lt;;;�g*��ѡl���9&gt;s@I��`R��V �c�������Ɂ��e�����,&gt; }���A�����W�?��&quot;.��ˡhޖ�Qy1�oL�_�W�h?9�E?Ofe��KO�Q��(�Av�N�h@��G�qvV�_G��W�g�'q�2�N��L�?�&amp;quot;鳷�x�o�����$9�}/;'#ȸ Q��&amp;�2�\�a��aǔ�L�I�ԯ�=���TPFE� ���:�,�H�N�'QQԯ&lt;&gt;�i}�x��'$�'O ��qy@J�h 2��ᓃ�CH��ʤO���0�LD)��p8�챺)
  </body>
</html>

ページを取得する私のメソッドは次のとおりです。

  public String doGet(String strUrl, List<NameValuePair> lstParams) throws Exception {

          String strResponse = null;
          HttpGet htpGet = new HttpGet(strUrl);
          //htpGet.addHeader("Accept-Encoding", "gzip, deflate");
          htpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1");
          DefaultHttpClient dhcClient = new DefaultHttpClient();
          PersistentCookieStore pscStore = new PersistentCookieStore(this.objContext);
          dhcClient.setCookieStore(pscStore);
          HttpResponse resResponse = dhcClient.execute(htpGet);
          strResponse = EntityUtils.toString(resResponse.getEntity());
          return strResponse;

  }

なぜこれが起こることができますか?

Jsoup 自体を使用してページを取得すると、応答は問題ありません。私は使用する必要がありますJsoup.connect("http://www.kat.ph/").get()

4

2 に答える 2

1

これは、応答が GZIP されたことが原因でした。応答を解凍するカスタム応答インターセプターを接続しました。これです:

class Decompressor implements HttpResponseInterceptor {

    /*
     * @see org.apache.http.HttpResponseInterceptor#process(org.apache.http.
     * HttpResponse, org.apache.http.protocol.HttpContext)
     */
    public void process(HttpResponse hreResponse, HttpContext hctContext)   throws HttpException, IOException {

        HttpEntity entity = hreResponse.getEntity();

        if (entity != null) {

            Header ceheader = entity.getContentEncoding();

            if (ceheader != null) {

                HeaderElement[] codecs = ceheader.getElements();

                for (int i = 0; i < codecs.length; i++) {

                    if (codecs[i].getName().equalsIgnoreCase("gzip")) {

                        hreResponse.setEntity(new HttpEntityWrapper(entity) {

                            @Override
                            public InputStream getContent() throws IOException, IllegalStateException {

                                return new GZIPInputStream(wrappedEntity.getContent());

                            }

                            @Override
                            public long getContentLength() {

                                return -1;

                            }

                        });

                        return;

                    }

                }

            }

        }

    }

}
于 2012-09-11T09:35:19.177 に答える
1

この方法を試してください....結果は同じです...

URL url = new URL("Your_URL");

InputStream is = url.openStream();   // or url.openConnection();

Scanner scan = new Scanner(is);

while(scan.hasNextLine()){

 System.out.println(scan.nextLine());


 }

}
于 2012-09-09T15:11:12.150 に答える