fix missing headers in video get requests

This commit is contained in:
Simon
2026-06-18 11:55:08 +00:00
parent 1b6fa5f924
commit 988e11b159
4 changed files with 60 additions and 13 deletions

View File

@@ -100,7 +100,8 @@ App.feed = App.feed || {};
const resolved = App.videos.resolveStreamSource(videoData);
if (!resolved.url) return;
const refererParam = resolved.referer ? `&referer=${encodeURIComponent(resolved.referer)}` : '';
const streamUrl = `/api/stream?url=${encodeURIComponent(resolved.url)}${refererParam}`;
const userAgentParam = resolved.userAgent ? `&User-Agent=${encodeURIComponent(resolved.userAgent)}` : '';
const streamUrl = `/api/stream?url=${encodeURIComponent(resolved.url)}${refererParam}${userAgentParam}`;
const isHls = /\.m3u8($|\?)/i.test(resolved.url);
const canUseHls = !!(window.Hls && window.Hls.isSupported());

View File

@@ -76,7 +76,8 @@ App.player = App.player || {};
return;
}
const refererParam = resolved.referer ? `&referer=${encodeURIComponent(resolved.referer)}` : '';
const streamUrl = `/api/stream?url=${encodeURIComponent(resolved.url)}${refererParam}`;
const userAgentParam = resolved.userAgent ? `&User-Agent=${encodeURIComponent(resolved.userAgent)}` : '';
const streamUrl = `/api/stream?url=${encodeURIComponent(resolved.url)}${refererParam}${userAgentParam}`;
let isHls = /\.m3u8($|\?)/i.test(resolved.url);
let isDirectMedia = /\.(mp4|m4v|m4s|webm|ts|mov)($|\?)/i.test(resolved.url);

View File

@@ -573,6 +573,7 @@ App.videos = App.videos || {};
const applyPreferredQuality = !options || options.applyPreferredQuality !== false;
let sourceUrl = '';
let referer = '';
let userAgent = '';
if (typeof videoOrUrl === 'string') {
sourceUrl = videoOrUrl;
} else if (videoOrUrl && typeof videoOrUrl === 'object') {
@@ -589,10 +590,16 @@ App.videos = App.videos || {};
if (best.http_headers && (best.http_headers.Referer || best.http_headers.referer)) {
referer = best.http_headers.Referer || best.http_headers.referer;
}
if (best.http_headers && (best.http_headers['User-Agent'] || best.http_headers['user-agent'])) {
userAgent = best.http_headers['User-Agent'] || best.http_headers['user-agent'];
}
}
if (!referer && meta.http_headers && (meta.http_headers.Referer || meta.http_headers.referer)) {
referer = meta.http_headers.Referer || meta.http_headers.referer;
}
if (!userAgent && meta.http_headers && (meta.http_headers['User-Agent'] || meta.http_headers['user-agent'])) {
userAgent = meta.http_headers['User-Agent'] || meta.http_headers['user-agent'];
}
}
if (!referer && sourceUrl) {
try {
@@ -601,15 +608,17 @@ App.videos = App.videos || {};
referer = '';
}
}
return { url: sourceUrl, referer };
return { url: sourceUrl, referer, userAgent };
};
// Builds a proxied stream URL with an optional referer parameter.
// Builds a proxied stream URL. Extra params other than `url` are forwarded
// by the backend as request headers, so use real header names here.
App.videos.buildStreamUrl = function(videoOrUrl, options) {
const resolved = App.videos.resolveStreamSource(videoOrUrl, options);
if (!resolved.url) return '';
const refererParam = resolved.referer ? `&referer=${encodeURIComponent(resolved.referer)}` : '';
return `/api/stream?url=${encodeURIComponent(resolved.url)}${refererParam}`;
const userAgentParam = resolved.userAgent ? `&User-Agent=${encodeURIComponent(resolved.userAgent)}` : '';
return `/api/stream?url=${encodeURIComponent(resolved.url)}${refererParam}${userAgentParam}`;
};
App.videos.downloadVideo = function(video) {