1

任意の Web ページのソースをダウンロードできるクラスを設計するというタスクがあります。しかし、コードをテストしてページをフェッチしようとすると、http://anidb.net/perl-bin/animedb.pl?show=main何も機能しません。

次のような標準コードは失敗します。

import java.net.*;
import java.io.*;

public class URLReader {
    public static void main(String[] args) throws Exception {
        URL link = new URL("http://www.anidb.net/");
        BufferedReader in = new BufferedReader(
        new InputStreamReader(link.openStream()));

        String inputLine;
        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);
        in.close();
    }
}

これが私が得た結果です:

Šwq>²"¦§5´_ï__ÇUº=ôÙö?kŠ}~“bd`?l“Ïçz¢Çêõ>_"?j׉R“y}K¸\Ìc_DLÙªÏ_
    –óMm_¼_0”•ö°ËC_aí½sî¤ìÁS ‚>dC0ìs_–y¹ñ±ÏÝÜAø%È_äÖá__æ©A@,4x„ж_ëɃ?

Cookie、ヘッダーファイルなど、すべて試しましたが、何も機能していないようです。何かヒントがあれば、よろしくお願いします。

4

2 に答える 2

5

http クライアントを作成するには、gzip エンコーディングとチャンク転送を考慮する必要があります。ライブラリを使用して Web ページをダウンロードすることをお勧めします。

次のようなものを試してください: http://code.google.com/p/google-http-java-client/

于 2012-09-22T08:54:12.863 に答える
2

質問で参照したサイトは、「Accept」リクエスト ヘッダーを尊重していないようであり、「Content-Encoding」レスポンス ヘッダーを正しく設定していないようです。これは正しくないと思います。

とにかく、 を使用しjava.util.zip.GZipInputStreamて、プレーン テキスト形式で応答を読み取ることもできます。

public static void main(String[] args) throws Exception
{
    URL link = new URL("http://www.anidb.net/");
    HttpURLConnection con = (HttpURLConnection) link.openConnection();

    GZIPInputStream in = new GZIPInputStream(con.getInputStream());
    byte[] b = new byte[1024];
    StringBuilder content = new StringBuilder();
    while (in.read(b) > 0)
    {
        content.append(new String(b));
    }
    System.out.println(content);
}
于 2012-09-22T09:00:40.180 に答える