我试图在服务器端使用dart获取icecast元数据。
我的对象有一个方法来检索元数据。
获取我需要使用特殊标头向icecast服务器发送HttpRequest的元数据。 如果它是一个propper icecast服务器,我应该得到一个响应头,其中包含键/值对" icy-metaint"," offset"
到目前为止我的飞镖码。HttpClient client = new HttpClient();
print(Uri.parse(this.src));
client.getUrl(Uri.parse(this.src))
.then((HttpClientRequest request) {
request.headers.add(HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36");
request.headers.add("Icy-MetaData", "1");
})
.then((HttpClientResponse response) {
});
但现在我不知道如何实际发送请求,或者它是否是正确的方法。
非常感谢任何帮助。
答案 0 :(得分:2)
我认为你需要关闭实际发送它的请求。
HttpClient client = new HttpClient();
print(Uri.parse(this.src));
client.getUrl(Uri.parse(this.src))
.then((HttpClientRequest request) {
request.headers.add(HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36");
request.headers.add("Icy-MetaData", "1");
return request.close(); // <= close the request
})
.then((HttpClientResponse response) {
});
您是否考虑过使用http包中的客户端? (如此处所示How to do POST in Dart command line HttpClient)
答案 1 :(得分:2)
这是一个有效的例子(建议来自:GünterZöchbauer)
HttpClient client = new HttpClient();
client.getUrl(Uri.parse(this.src))
.then((HttpClientRequest request) {
request.headers.add(HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36");
request.headers.add("Icy-MetaData", "1");
return request.close();
})
.then((HttpClientResponse response) {
if(response.headers.value("icy-metaint") != null) {
this.offset = int.parse(response.headers.value("icy-metaint"));
}
print(offset.toString());
});