1

我正在尝试使用 Java从此站点获取 HTML 页面源内容:“ http://207.200.96.231:8008 ”。然而,Java 的默认库在这方面对我没有帮助。我也尝试使用本教程,但也没有用。我认为问题的出现是因为网站的安全保护。当我运行下面提供的以下代码时,我得到一个异常:java.io.IOException: Invalid Http response.

关于如何实现代码的任何想法?或者有没有可以满足我需求的图书馆?到目前为止,我已经尝试过JSoupHTML JerichoParser 认为他们会使用不同的方法连接到我提供的网站,但他们也未能正常工作。

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();
}

编辑(问题已解决):在Karai17垃圾桶的帮助下,我设法解决了这个问题。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]。

> 获取/HTTP/1.1
> 用户代理:curl/...
> 主机:207.200.96.231:8008
> 接受:*/*
>
冰冷 200 OK
icy-notice1:
此流需要Winamp
icy-notice2:SHOUTcast 分布式网络音频服务器/Linux v1.9.93atdn
icy-name:Absolutely Smooth Jazz - SKY.FM - 世界上最流畅的爵士乐全天 24 小时 冰冷的流派:柔和流畅的爵士乐 冰冷的网址:http://www.sky.fm/smoothjazz/ 内容类型:音频/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 回答