Java Can';无法获取联机ShoutCast流的标头

Java Can';无法获取联机ShoutCast流的标头,java,http,header,httpurlconnection,shoutcast,Java,Http,Header,Httpurlconnection,Shoutcast,我已经工作了24小时来发现这个在线流的问题: 您可以尝试它,它正在工作,但是当我尝试使用Java从它获取头时 我明白了: Sending 'GET' request to URL : http://str45.streamakaci.com:8014 Response Code : -1 Response Message : {Content-type=[unknown/unknown]} 当我使用SMSSniffer查看返回的HTTP头是否正确时,我得到了以下结果 GET / HTTP/1.

我已经工作了24小时来发现这个在线流的问题: 您可以尝试它,它正在工作,但是当我尝试使用Java从它获取头时 我明白了:

Sending 'GET' request to URL : http://str45.streamakaci.com:8014
Response Code : -1
Response Message : {Content-type=[unknown/unknown]}
当我使用SMSSniffer查看返回的HTTP头是否正确时,我得到了以下结果

GET / HTTP/1.1
Content-Type: text/html; charset=UTF-8
Icy-MetaData: 1
Accept-Encoding: gzip
Content-Encoding: gzip, deflate
Cache-Control: no-cache
User-Agent: Java/1.8.0_131
Host: str45.streamakaci.com:8014
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive


ICY 200 OK
icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-name:Radio Flemme MP3
icy-genre:Various
icy-url:http://www.radioflemme.com
content-type:audio/mpeg
icy-pub:0
icy-metaint:32768
icy-br:128 
请任何人帮我解决这个问题。 鉴于

URL确实正确返回了标头,下面是一个使用lynx检查终端中标头的命令:

lynx -mime_header http://str45.streamakaci.com:8014
HTTP/1.0 200 OK
content-type:text/html

<HTML><HEAD><meta http-equiv="Content-Language" content="en-us"><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><meta http-equiv="Pragma" content="no-cache">.... HTML follows
lynx-mime\u头http://str45.streamakaci.com:8014
HTTP/1.0 200正常
内容类型:text/html
.... HTML如下
它不是100%清楚你在寻找什么,所以以防万一我会提到这一点 URL是Shoutcast“状态”页面的地址,而不是音频流。 如果您想要音频流,URL将是: 此处末尾的“stream”并不重要,可以是任何字符串,甚至可以是;会很好的。 因此,让我们检查流标题:

lynx -mime_header "http://str45.streamakaci.com:8014/;stream"
ICY 200 OK
icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-name:Radio Flemme MP3
icy-genre:Various
icy-url:http://www.radioflemme.com
content-type:audio/mpeg
icy-pub:0
icy-br:128
lynx-mime_头”http://str45.streamakaci.com:8014/;溪流“
冰200行吗
ICE-notice1:
此流需要
icy-notice2:SHOUTcast分布式网络音频服务器/Linux v1.9.8
名称:弗莱姆MP3电台 冰的类型:各种 冰冷的url:http://www.radioflemme.com 内容类型:音频/mpeg 冰酒吧:0 冰br:128
所有这些都不是Java特有的,我无法告诉您代码,但可以确认此Shoutcast以正确的方式返回标头。

URL确实正确返回标头,以下是使用lynx检查终端中标头的命令:

lynx -mime_header http://str45.streamakaci.com:8014
HTTP/1.0 200 OK
content-type:text/html

<HTML><HEAD><meta http-equiv="Content-Language" content="en-us"><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><meta http-equiv="Pragma" content="no-cache">.... HTML follows
lynx-mime\u头http://str45.streamakaci.com:8014
HTTP/1.0 200正常
内容类型:text/html
.... HTML如下
它不是100%清楚你在寻找什么,所以以防万一我会提到这一点 URL是Shoutcast“状态”页面的地址,而不是音频流。 如果您想要音频流,URL将是: 此处末尾的“stream”并不重要,可以是任何字符串,甚至可以是;会很好的。 因此,让我们检查流标题:

lynx -mime_header "http://str45.streamakaci.com:8014/;stream"
ICY 200 OK
icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-name:Radio Flemme MP3
icy-genre:Various
icy-url:http://www.radioflemme.com
content-type:audio/mpeg
icy-pub:0
icy-br:128
lynx-mime_头”http://str45.streamakaci.com:8014/;溪流“
冰200行吗
ICE-notice1:
此流需要
icy-notice2:SHOUTcast分布式网络音频服务器/Linux v1.9.8
名称:弗莱姆MP3电台 冰的类型:各种 冰冷的url:http://www.radioflemme.com 内容类型:音频/mpeg 冰酒吧:0 冰br:128

所有这些都不是Java特有的,我无法告诉您代码,但可以确认此Shoutcast以正确的方式返回标题。

您的HTTP客户端似乎与响应状态行不兼容:

ICY 200 OK
对于正常的HTTP连接,此响应类似于
HTTP/1.0 200 OK
。较老的客户端支持这一点,并将连接视为HTTP 1.0或0.9,但在这一过程中,我们逐渐失去了这一功能

理想情况下,您可以用现代化的设备替换此服务器。Icecast是您的代替品,还支持HTTPS。SHOUTcast DNAS有更新的版本,但HTTPS很麻烦,并且有额外的许可要求,所以这些天我甚至都不想为它操心。当然,您也可以使用HLS,根本不需要专门的流媒体服务器。(只需了解兼容性和延迟方面的折衷。)


如果您无法控制服务器,则需要以某种方式覆盖HTTP客户端,以允许它接受
ICY
样式的状态行。如果无法做到这一点,您将无法进行常规TCP连接并自己解析响应。

您的HTTP客户端似乎与响应状态行不兼容:

ICY 200 OK
对于正常的HTTP连接,此响应类似于
HTTP/1.0 200 OK
。较老的客户端支持这一点,并将连接视为HTTP 1.0或0.9,但在这一过程中,我们逐渐失去了这一功能

理想情况下,您可以用现代化的设备替换此服务器。Icecast是您的代替品,还支持HTTPS。SHOUTcast DNAS有更新的版本,但HTTPS很麻烦,并且有额外的许可要求,所以这些天我甚至都不想为它操心。当然,您也可以使用HLS,根本不需要专门的流媒体服务器。(只需了解兼容性和延迟方面的折衷。)


如果您无法控制服务器,则需要以某种方式覆盖HTTP客户端,以允许它接受
ICY
样式的状态行。如果您无法做到这一点,您将无法进行常规TCP连接并自己解析响应。

我发现当您开始播放流时,流会发送头信息,这正常吗?我发现当您开始播放流时,流会发送头信息,这正常吗?谢谢你的回复,我想要的是得到icy头,这样我就可以提取我需要的数据,比如meta int,但是即使我添加了/;在流的末尾,我仍然得到相同的结果。这并不是发生在所有shoutcast流中,只是其中的一部分,请尝试java代码如果您尝试其他url,例如:,它工作正常并返回所需的信息。我真的很绝望!38.99.146.102:8000是shoutcast版本2,他们将标头固定为更标准兼容。我没有服务器,我无法更改标头标准。这方面有什么工作吗?谢谢我怀疑Java有一种读取HTTP阅读器的“原始”方式,如果你的库/类不能解析非标准ICY头-这是我认为的唯一方式。谢谢你的回复,我想要的是得到ICY头,这样我就可以提取我需要的数据,比如meta int,但即使我添加了/;在流的末尾,我仍然得到相同的结果。这并不是发生在所有shoutcast流中,只是其中的一部分,请尝试java代码如果您尝试其他url,例如:,它工作正常并返回所需的信息。我真的很绝望!38.99.146.102:8000是shoutcast版本2,其中他们将标题固定到