1

Java を使用して、このサイト「 http://207.200.96.231:8008 」から HTML ページのソース コンテンツを取得しようとしています。ただし、Java のデフォルト ライブラリは、この問題では役に立ちませんでした。このチュートリアルも使用してみましたが、どちらも機能しませんでした。この問題は、サイトのセキュリティ保護のために発生していると思います。以下に示す次のコードを実行すると、例外が発生します: java.io.IOException: Invalid Http response.

コードを実装する方法のアイデアはありますか? または、私のニーズを満たすことができるライブラリはありますか? これまでのところ、私が提供したサイトに接続する別のアプローチを使用することを HTML パーサーで試してみJSoupましJerichoたが、それらも機能しませんでした。

String urlstr = "http://72.26.204.28:9484/played.html";

try {

    URL url = new URL(urlstr);

    URLConnection urlc = url.openConnection();

    InputStream stream = urlc.getInputStream();
    BufferedInputStream buf = new BufferedInputStream(stream);

    StringBuilder sb = new StringBuilder();

    while ( true){

    int data = buf.read();

    if ( data == -1)
        break;
    else
        sb.append((char)data);
    }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
}

編集 (解決済みの問題): Karai17Trashgodの助けを借りて、この問題を解決することができました。Shoutcast ページのコンテンツにアクセスするには、ユーザー エージェントが必要です。したがって、次のコードを追加するだけです。

urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0");

最新のコードは次のようになります。

try {
        URL url = new URL("http://207.200.96.231:8008/7.html");
        HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
        urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0");

        InputStream is = urlConnection.getInputStream();
        BufferedInputStream in = new BufferedInputStream(is);
        int c;
        while ((c = in.read()) != -1) {
            System.out.write(c);
        }
        urlConnection.disconnect();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
}
4

1 に答える 1

1

このストリームにはWinampが必要なようです。

$ curl -v http://207.200.96.231:8008
* connect() を 207.200.96.231 ポート 8008 (#0) にしようとしています
* 207.200.96.231...接続を試行中
※207.200.96.231(207.200.96.231)ポート8008(#0)に接続
[Winamp][2] が必要なようです。

> GET / HTTP/1.1
> ユーザーエージェント: curl/...
> ホスト: 207.200.96.231:8008
> 受け入れる: */*
>
ICY 200 OK
icy-notice1:
このストリームにはWinamp
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.93atdnが必要です
icy-name:アブソリュートリー スムース ジャズ - SKY.FM - 世界一スムースなジャズを 24 時間いつでも 氷のジャンル:ソフトスムースジャズ 氷のURL:http://www.sky.fm/smoothjazz/ content-type:audio/mpeg アイシーパブ:1 氷-br:96 ...

補遺: ストリームは次のように読むことができます。

URL url = new URL("http://207.200.96.231:8008");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
BufferedInputStream in = new BufferedInputStream(is);
int c;
while ((c = in.read()) != -1) {
    System.out.write(c);
}
于 2012-07-30T01:22:14.277 に答える