美文网首页公众号:give派转载合作计划
PHP快速实现解析无水印播放地址URL——快手篇

PHP快速实现解析无水印播放地址URL——快手篇

作者: 水的中间态 | 来源:发表于2020-06-17 20:24 被阅读0次

    原理分析

    从快手App拿到视频分享链接在浏览器中访问,比如地址 f.kuaishou.com/1mqmxe 然后会重定向,打开浏览器控制台点击左上角的手机图片,刷新模拟手机请求,观察控制台源码可以看到下面的一段代码里包含一个srcNoWark字段的MP4视频地址,提取出来在浏览器中访问可以看到视频是污水印的。

    image.png

    完整代码

    下载Guzzle库并引入

    composer require guzzlehttp/guzzle
    
    require __DIR__.'/vendor/autoload.php';
    $url = $_GET['url'] ?? '';
    $headers = [  
        'Connection' => 'keep-alive',  
        'User-Agent'=>'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1'
    ];
    $client = new \GuzzleHttp\Client(['timeout' => 2, 'headers' => $headers, 'http_errors' => false,]);
    $data['headers'] = $headers;
    $jar = new \GuzzleHttp\Cookie\CookieJar;
    $data['cookies'] = $jar;
    $response = $client->request('GET', $url, $data);
    $body = $response->getBody();
    if ($body instanceof \GuzzleHttp\Psr7\Stream) {  
        $body = $body->getContents();
    }
    $result = htmlspecialchars_decode($body);
    $pattern = '#"srcNoMark":"(.*?)"#';
    preg_match($pattern, $result, $match);
    $data['video_src'] = $match[1];
    $pattern = '#"poster":"(.*?)"#';
    preg_match($pattern, $result, $match);
    if (!empty($match[1])) {  
        $data['cover_image'] = $match[1];
        echo json_encode($data);die();
    }
    复制代码
    

    下载安装并引入guzzle请求PHP包, 初始化传入模拟手机浏览器的请求头,以及cookie。对请求返回的html页面进行正则匹配出无水印播放URL

    系列文章

    • 去水印系列教程,包括抖音,微视,西瓜,youtube等

    关注《一只码》公众号发送抖音获取完整源码

    相关文章

      网友评论

        本文标题:PHP快速实现解析无水印播放地址URL——快手篇

        本文链接:https://www.haomeiwen.com/subject/fohexktx.html