如何破解 YouTube JavaScript API 以始终使用 HTTP?

How do I hack the YouTube JavaScript API to always use HTTP?

我打算在播放视频时测量网络流量。这当然只有在视频通过 HTTP 而不是 HTTPS 传输时才有效。

尽管我从 http:// 加载 API 并使用 http:// 指定 YouTube URL,但 YouTube iframe API 总是切换到 HTTPS 下载也。您可以使用 example here 来测试播放器。如您所见,它总是切换到 https://videoplayback...,这是我想要禁用的。

如何强制它使用 HTTP 而不是 HTTPS?这有点像 inverse question of this。我想这将归结为将一些功能入侵到当前的 JS 中。

在小部件中 API 我可以看到这样的调用:

b = 0 == c.indexOf("https:") ? [c] : b.d ? [c.replace("http:", "https:")] : b.k ? [c] : [c, c.replace("http:", "https:")];

if (this.d = !!("https:" == document.location.protocol || a && 0 == a.src.indexOf("https:"))) {
    a = [this.j, window.YTConfig || {}, this.defaults];
    for (var b = 0; b < a.length; b++) a[b].host && (a[b].host = a[b].host.replace("http://", "https://"))
}

但我不知道在 YTYT.Player 对象的上下文中在哪里覆盖它,或者我是否可以这样做。

对于那些想知道这在服务器端是否不可能的人:请注意,YouTube 确实 仅适用于 HTTP。如果您没有登录 YouTube 并转到 http://youtube.com,您的视频播放将采用 HTTP,而不是 HTTPS。

YouTube 现在通过 301 重定向强制使用 https。前段时间情况并非如此。重定向只是存储在 cookie 中的用户设置。

您可以尝试在 m.youtube.com 上更改您的用户代理 and/or 测试,但流量测量可能不准确,因为它的域和协议不同,而且 youtube 可以有不同的优先级。

在 Chrome 开发工具中更改用户代理很简单(phone 图标在左上角)。