使用Javascript检查m3u8网址是否已损坏

时间:2015-09-16 11:58:00

标签: javascript jquery ajax

我使用以下代码来确定m3u8 URL是否已损坏。我使用两个不同的URL进行测试,一个在线,一个在线。对于这两种情况,我的javascript函数不会提醒我文件是否被找到而firefox调试不会给我任何错误,但状态变量总是显示0.有人能告诉我我在做错了吗?

编辑:

for offline url i get this header response(in httpfox developer tool) :HTTP/1.1 404 Not Found
for online url i get this header response(in httpfox developer tool) :HTTP/1.1 200 OK

代码:

 <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>
    function testFunction() {


    //m="http://someothersite.com/offline.m3u8";
    m="http://somesite.com/workingfile.m3u8";

    //now we checking if the file exist

    UrlExists(m, function(status){
     alert('status:'+status);
        if(status === 200){
           // file was found
           alert('file found'+m);

        }
        else if(status === 404){
           // 404 not found
           alert('file not found'+m);


        }
    });

    function UrlExists(url, cb){
        jQuery.ajax({
            url:      url,
            dataType: 'text',
            type:     'GET',
            complete:  function(xhr){
            alert(+xhr.status);
                if(typeof cb === 'function')
                   cb.apply(this, [xhr.status]);

            }
        });
    }


    }// end of main

    </script>




    </head>
    <body>
    <button onclick="testFunction()">Click me</button>
    </html>

1 个答案:

答案 0 :(得分:2)

如果您使用外部网址,这将无效,因为CORS(跨域资源共享)将启动并因您不在同一个域中而阻止您。

工作版本:仅限本地文件

UrlExists('/path/file.php', function(status){
    if(status === 200){
       alert('file found');
    }
    else if(status === 404){
       alert('file not found');
    }
});

不幸的是,通过Javascript没有一种有效的方法。但是,您可以通过后端功能执行此操作,例如PHP

$file = 'http://www.othername.com/somefile.jpg';
$file_headers = @get_headers($file);

if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}

如果你将它构建成一个php函数,然后使用你的Ajax功能将URL传递给PHP进行验证,然后返回一个响应 - 它应该可以工作。

编辑:卷曲示例

$mainUrl = curl_init($url);
curl_setopt($mainUrl,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($mainUrl);

$httpCode = curl_getinfo($mainUrl, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    echo "404 Error";
}else if($httpCode == 200){
    echo "200 Error";
}else{
    echo "all good - sort off...";
}

curl_close($mainUrl);

这是Curl选项 - 现在我的方式(我真的必须这样做......)循环遍历页面上的每个URL(以js为单位)并将其作为对象发送到PHP(通过Ajax)。使用PHP,我将使用上面的CURL功能来确认哪些被破坏(使用1或0),然后发回一个响应。