我正在使用 Apache HttpClient(来自 Apache HTTP Components 4.3)来针对 ShoutCast 流执行 GET:
CloseableHttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet("http://relay3.181.fm:8062/");
CloseableHttpResponse response = client.execute(request);
对 client.execute() 的调用永远不会返回,并且根据调试器,它是对 java.net.SocketInputStream#socketRead0() 的嵌套调用,它是调用堆栈中的最后一个节点。通过分析代码,我唯一的结论(基于不断增加的 char[] 分配数量)是它只是“锁定”到流并无限期地从套接字中提取字节。
我想要的是让客户端简单地正常工作并给我一个 HTTPResponse,我可以用它来从流中提取我想要的东西。事实上,我已经能够使用其他 ShoutCast 流来做到这一点,但不是这个。
有没有办法解决这个问题?例如,我可以告诉客户端在一定数量的字节后中断吗?