This commit is contained in:
Radek Davidek 2026-03-04 15:10:13 +01:00
parent 3a47f02a24
commit f227137650

View File

@ -859,7 +859,7 @@ public final class XtreamPlayerApplication {
));
copyRequestHeaderIfPresent(exchange, requestBuilder, "Range");
copyRequestHeaderIfPresent(exchange, requestBuilder, "If-Range");
String referer = resolveRefererForCandidate(candidate, sourceUrl);
String referer = resolveRefererForCandidate(exchange, candidate, sourceUrl);
if (!referer.isBlank()) {
requestBuilder.header("Referer", referer);
String origin = originFromUrl(referer);
@ -871,8 +871,14 @@ public final class XtreamPlayerApplication {
return HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofByteArray());
}
private static String resolveRefererForCandidate(URI candidate, String sourceUrl) {
private static String resolveRefererForCandidate(HttpExchange exchange, URI candidate, String sourceUrl) {
URI candidateDir = directoryUri(candidate);
if (sourceUrl == null || sourceUrl.isBlank()) {
String appReferer = appRefererFromExchange(exchange);
if (!appReferer.isBlank()) {
return appReferer;
}
}
if (candidateDir != null) {
String path = candidateDir.getPath() == null ? "" : candidateDir.getPath().toLowerCase(Locale.ROOT);
if (path.contains("/hls/")) {
@ -885,6 +891,18 @@ public final class XtreamPlayerApplication {
return candidateDir == null ? "" : candidateDir.toString();
}
private static String appRefererFromExchange(HttpExchange exchange) {
String proto = exchange.getRequestHeaders().getFirst("X-Forwarded-Proto");
if (proto == null || proto.isBlank()) {
proto = "http";
}
String host = exchange.getRequestHeaders().getFirst("Host");
if (host == null || host.isBlank()) {
return "";
}
return proto + "://" + host + "/";
}
private static URI directoryUri(URI uri) {
if (uri == null || uri.getScheme() == null || uri.getRawAuthority() == null) {
return null;