在获取URL之前了解URL的性质

时间:2017-11-13 10:34:39

标签: javascript http meteor

是否可以在GET之前了解网址的性质?

我有一个特别是以m3u结尾但不是我可以下载的简单文件的URL。这实际上是一个无线电流。正如我所期望的那样(有限)文件,GET方法永远不会结束。在这种情况下,超时选项不起作用(正常)。

const options = {timeout: 5000};
return HTTP.call('GET', "http://av.rasset.ie/av/live/radio/junior.m3u", options);

安全的解决方案应该是在实际获取文件之前询问响应的类型。 我怎么能这样做?

谢谢, 迈克尔。

2 个答案:

答案 0 :(得分:1)

我想您可以先运行HEAD请求(而不是GET)并验证标头。然后在制作GET后你会知道如何反应。

不幸的是,在这种特殊情况下,HEAD适用于第一个请求(返回重定向):

 curl -v -X HEAD http://icecast1.rte.ie/junior               http://av.rasset.ie/av/live/radio/junior.m3u
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the 
Warning: way you want. Consider using -I/--head instead.
*   Trying 104.16.107.29...
* TCP_NODELAY set
* Connected to av.rasset.ie (104.16.107.29) port 80 (#0)
> HEAD /av/live/radio/junior.m3u HTTP/1.1
> Host: av.rasset.ie
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 302 FOUND
< Date: Mon, 13 Nov 2017 11:07:33 GMT
< Content-Type: text/html; charset=utf-8
< Connection: keep-alive
< Set-Cookie: __cfduid=d89353ae357a0452208835b3092f0fbee1510571253; expires=Tue, 13-Nov-18 11:07:33 GMT; path=/; domain=.rasset.ie; HttpOnly
< Location: http://icecast1.rte.ie/junior
< X-Server-Name: djd
< Cache-Control: max-age=0
< Accept-Ranges: bytes
< X-Varnish: 2802121867
< X-Served-By: MISS: mt-www2.rte.ie
< CF-Cache-Status: MISS
< Server: cloudflare-nginx
< CF-RAY: 3bd1449d2764410c-HAM
* no chunk, no close, no size. Assume close to signal end
< 
^C

但是第二次失败(可能HEAD不支持,应该返回405):

 curl -v -X HEAD http://icecast1.rte.ie/junior               
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the 
Warning: way you want. Consider using -I/--head instead.
*   Trying 89.207.56.171...
* TCP_NODELAY set
* Connected to icecast1.rte.ie (89.207.56.171) port 80 (#0)
> HEAD /junior HTTP/1.1
> Host: icecast1.rte.ie
> User-Agent: curl/7.51.0
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 400 Bad Request
< Server: Icecast 2.4.2
< Date: Mon, 13 Nov 2017 11:07:42 GMT
< Content-Type: text/html; charset=utf-8
< Cache-Control: no-cache
< Expires: Mon, 26 Jul 1997 05:00:00 GMT
< Pragma: no-cache
< 
<html><head><title>Error 400</title></head><body><b>400 - unknown request</b></body></html>
* Curl_http_done: called premature == 0
* Closing connection 0

答案 1 :(得分:0)

即使在这种特殊情况下,运行HEAD会遇到HTTP Parse错误,而我知道流是正常的(如果有人仍然可以解释为什么,我会很感激),我认为Opal提供了一般解决方案:< / p>

  

您可以先运行HEAD请求