This commit is contained in:
Radek Davidek 2026-03-04 14:25:53 +01:00
parent 0253459417
commit 2dc782bebe

View File

@ -13,6 +13,8 @@ import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
@ -41,9 +43,11 @@ public final class XtreamPlayerApplication {
private static final String DEFAULT_BROWSER_UA =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
+ "(KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36";
private static final CookieManager COOKIE_MANAGER = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
private static final HttpClient HTTP_CLIENT = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(20))
.followRedirects(HttpClient.Redirect.NORMAL)
.cookieHandler(COOKIE_MANAGER)
.version(HttpClient.Version.HTTP_1_1)
.build();
@ -253,12 +257,19 @@ public final class XtreamPlayerApplication {
));
copyRequestHeaderIfPresent(exchange, requestBuilder, "Range");
copyRequestHeaderIfPresent(exchange, requestBuilder, "If-Range");
copyRequestHeaderIfPresent(exchange, requestBuilder, "Referer");
copyRequestHeaderIfPresent(exchange, requestBuilder, "Origin");
HttpRequest request = requestBuilder.build();
HttpResponse<byte[]> response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofByteArray());
String contentType = response.headers().firstValue("Content-Type").orElse("application/octet-stream");
byte[] body = response.body() == null ? new byte[0] : response.body();
if (response.statusCode() >= 400) {
LOGGER.warn(
"Stream proxy upstream returned status={} uri={} bytes={} contentType={}",
response.statusCode(),
maskUri(target),
body.length,
contentType
);
}
if (isHlsPlaylist(target, contentType)) {
String rewritten = rewritePlaylistForProxy(target, body);