使用Javascript检查m3u8 URL是否中断
我使用以下代码来确定m3u8 URL是否已损坏。我使用两个不同的URL进行测试,一个在线,一个离线。对于这两种情况,我的javascript函数不会提醒我是否找到了文件,firefox调试也不会给我任何错误,但状态变量始终显示0。谁能告诉我我做错了什么 编辑: 代码:使用Javascript检查m3u8 URL是否中断,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用以下代码来确定m3u8 URL是否已损坏。我使用两个不同的URL进行测试,一个在线,一个离线。对于这两种情况,我的javascript函数不会提醒我是否找到了文件,firefox调试也不会给我任何错误,但状态变量始终显示0。谁能告诉我我做错了什么 编辑: 代码: 函数testFunction(){ //m=”http://someothersite.com/offline.m3u8"; m=”http://somesite.com/workingfile.m3u8"; //现在我们检查文
函数testFunction(){
//m=”http://someothersite.com/offline.m3u8";
m=”http://somesite.com/workingfile.m3u8";
//现在我们检查文件是否存在
URLEISTS(m,函数(状态){
警报(“状态:”+状态);
如果(状态===200){
//文件被找到
警报(“找到文件”+m);
}
否则如果(状态===404){
//404找不到
警报(“未找到文件”+m);
}
});
函数UrlExists(url,cb){
jQuery.ajax({
url:url,
数据类型:“文本”,
键入:“GET”,
完成:函数(xhr){
警报(+xhr.状态);
如果(cb的类型==‘函数’)
cb.适用(本[xhr.状态]);
}
});
}
}//干管末端
点击我
如果您使用外部URL,这将不起作用,因为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),然后返回一个响应。感谢您的回复。对于图像文件,javascript可以工作!为什么跨域不是问题?我在firebug的m3u8链接上没有收到任何跨域错误!此外,如果我使用php作为URL列表,它会在服务器端消耗大量资源吗?要使get_头工作,需要在服务器端启用什么?对于图像,它是不同的,因此对于图像,您可以在图像中使用
onerror=“javascriptFunction()”
。现在,对于图像,它们需要直接从pageload
上的URL加载。对于链接,它们只是静态字符串,直到用户单击它,然后被带到目的地。这是一个ajax调用,所以请仔细检查网络选项卡,看看您得到的响应是什么。。。是的,内存使用率会很高,但不要认为它会耗尽您的服务器。有多种方法可以检查链接是否处于活动状态(get_headers
是一个示例,curl
是另一个示例)我尝试获取您的链接头代码,但没有打印任何内容?如何检查我测试的服务器是否允许get_头方法?您认为get_uuheader方法比curl更好?@user1788736更新了curl示例。get_头
代码只会在变量中返回true
或false
。这是在if语句之外使用该变量所做的事情get_header
很好,curl
也很好(它们都有自己的位置),所以我放置了两个示例我测试了你的php解决方案,测试了一个不存在的文件,脚本需要永远停止,我用$httpcode=0得到0!(适用于可下载的m3u8,脚本快速停止并显示200)是否有办法在几秒钟后超时,并向用户输出m3u8 url已损坏?
$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;
}
$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);