如何使用preg_match提取页面中的流媒体PK值?
Hey,我帮你调整了PHP代码,现在可以精准提取到你要的流媒体PK值啦。
问题分析
你的目标是从页面源码里提取enableVideo("5be02e45f5917b29199f8e5326499a6f8c6c7c9df86920b38c09bee46b050289")里的PK字符串,原来的代码有两个小问题:
- HTTP请求头里的
Referer和User-Agent没有正确分隔,服务器可能拒绝请求 - 正则表达式的匹配逻辑不够精准,容易匹配到错误内容
调整后的PHP代码
<?php // 修复HTTP请求头的分隔问题,用\r\n区分不同头字段 $opts = array( 'http' => array( 'method' => "GET", 'header' => "Referer: http://www.ucaster.me/hembedplayer/shid05/1/1/1\r\n" . "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0" ) ); $url = file_get_contents('http://www.ucaster.me/hembedplayer/shid05/1/1/1', false, stream_context_create($opts)); // 调整正则,精准匹配enableVideo("PK值")的格式 preg_match('/enableVideo\("([a-f0-9]+)"\)/s', $url, $m); // 提取并输出PK值 if(isset($m[1])){ echo $m[1]; } else { echo "未找到PK值"; } ?>
关键修改点
- HTTP头修复:在
Referer和User-Agent之间添加\r\n,符合HTTP协议的头字段分隔要求,确保请求被服务器正常处理 - 正则优化:直接匹配
enableVideo("...")的格式,其中[a-f0-9]+专门匹配十六进制的PK字符串,避免无关内容干扰,匹配更精准
目标页面源码参考
<script type="text/javascript"> var videoPlayer = document.createElement("video"); videoPlayer.setAttribute("id", "videoplayer"); videoPlayer.setAttribute("width", "580"); videoPlayer.setAttribute("height", "450"); videoPlayer.setAttribute("poster", "/static/images/logo.png"); videoPlayer.setAttribute("autoplay", true); videoPlayer.setAttribute("controls", ""); var em = document.createElement("em"); em.innerHTML = "Sorry, your browser doesn't support HTML5 video."; videoPlayer.appendChild(em); document.getElementById("player_div").appendChild(videoPlayer); function setupVideo() { if (Hls.isSupported()) { var video = document.getElementById('videoplayer'); var player = new Hls(); player.attachMedia(video); player.on(Hls.Events.MEDIA_ATTACHED, function () { var hlsUrl = "http://" + ea + ":8088/live/shid04/playlist.m3u8?id=95328&pk="; hlsUrl = hlsUrl + enableVideo("5be02e45f5917b29199f8e5326499a6f8c6c7c9df86920b38c09bee46b050289"); player.loadSource(hlsUrl); player.on(Hls.Events.MANIFEST_PARSED, function (event, data) { video.play(); }); }); }else { em.innerHTML = "Sorry, your browser doesn't support HTML5 video."; } } </script>
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

