微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

https.get 与 youtube 视频返回空缓冲区

如何解决https.get 与 youtube 视频返回空缓冲区

我使用 ytdl-core 获取 youtube 视频的直接网址(以 https://r1-- 等开头的长网址),并使用 https.get 下载它们。大约 70% 的时间当 res.end 被调用时,它返回一个空缓冲区而不是视频的数据。

这是我目前用来处理 http 请求的代码

function largeHttpGet(url,callback,progress) {

    try{

        var _current = 0;
        var _buffer = [];

        var _req = https.get(url,function (res) {

            var _total = parseInt(res.headers['content-length'],10);

            res.on('data',function (chunk) {
                _buffer.push(chunk);


                _current = parseFloat(_current + chunk.length);

                progress(_current / _total * 100);
            })

            res.on('end',function () {
                callback(Buffer.concat(_buffer));
                //this returns an empty buffer the majority of the time
            })

        })

    }
    catch(error){

        console.log("[HTTP]: " + error);

    }

}

这就是我用来获取 YouTube 视频信息的方法

getVidInfo(link,function(info){

    back.send("return",{"key": key,"data": info} );

})

错误仅发生在 youtube 视频链接上,所有其他请求都正常工作。

解决方法

可能是因为使用了 on('end'... 而不是 `on('finish'...)

因为可能还有其他工作尚未完成。

,

发现问题,当请求失败时,是因为 youtube 返回了重定向代码 (302) 而不是直接链接,按照重定向导致实际 url,下载没有问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。