fix4
This commit is contained in:
parent
4ea3d96496
commit
de7d38c596
@ -248,37 +248,47 @@ public final class XtreamPlayerApplication {
|
|||||||
List<URI> attempts = candidateUris(target);
|
List<URI> attempts = candidateUris(target);
|
||||||
HttpResponse<byte[]> response = null;
|
HttpResponse<byte[]> response = null;
|
||||||
URI usedTarget = target;
|
URI usedTarget = target;
|
||||||
|
List<String> attemptErrors = new ArrayList<>();
|
||||||
for (URI candidate : attempts) {
|
for (URI candidate : attempts) {
|
||||||
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(candidate)
|
try {
|
||||||
.GET()
|
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(candidate)
|
||||||
.timeout(Duration.ofSeconds(60))
|
.GET()
|
||||||
.header("User-Agent", firstNonBlank(
|
.timeout(Duration.ofSeconds(60))
|
||||||
exchange.getRequestHeaders().getFirst("User-Agent"),
|
.header("User-Agent", firstNonBlank(
|
||||||
DEFAULT_BROWSER_UA
|
exchange.getRequestHeaders().getFirst("User-Agent"),
|
||||||
))
|
DEFAULT_BROWSER_UA
|
||||||
.header("Accept", firstNonBlank(
|
))
|
||||||
exchange.getRequestHeaders().getFirst("Accept"),
|
.header("Accept", firstNonBlank(
|
||||||
"*/*"
|
exchange.getRequestHeaders().getFirst("Accept"),
|
||||||
));
|
"*/*"
|
||||||
copyRequestHeaderIfPresent(exchange, requestBuilder, "Range");
|
));
|
||||||
copyRequestHeaderIfPresent(exchange, requestBuilder, "If-Range");
|
copyRequestHeaderIfPresent(exchange, requestBuilder, "Range");
|
||||||
if (!sourceUrl.isBlank()) {
|
copyRequestHeaderIfPresent(exchange, requestBuilder, "If-Range");
|
||||||
requestBuilder.header("Referer", sourceUrl);
|
if (!sourceUrl.isBlank()) {
|
||||||
String origin = originFromUrl(sourceUrl);
|
requestBuilder.header("Referer", sourceUrl);
|
||||||
if (!origin.isBlank()) {
|
String origin = originFromUrl(sourceUrl);
|
||||||
requestBuilder.header("Origin", origin);
|
if (!origin.isBlank()) {
|
||||||
|
requestBuilder.header("Origin", origin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
HttpRequest request = requestBuilder.build();
|
||||||
HttpRequest request = requestBuilder.build();
|
HttpResponse<byte[]> candidateResponse = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
||||||
HttpResponse<byte[]> candidateResponse = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
if (response == null || response.statusCode() >= 400) {
|
||||||
response = candidateResponse;
|
response = candidateResponse;
|
||||||
usedTarget = candidate;
|
usedTarget = candidate;
|
||||||
if (candidateResponse.statusCode() < 400) {
|
}
|
||||||
break;
|
if (candidateResponse.statusCode() < 400) {
|
||||||
|
response = candidateResponse;
|
||||||
|
usedTarget = candidate;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (Exception candidateException) {
|
||||||
|
attemptErrors.add(maskUri(candidate) + " -> " + compactError(candidateException));
|
||||||
|
LOGGER.warn("Stream proxy candidate failed uri={}", maskUri(candidate), candidateException);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (response == null) {
|
if (response == null) {
|
||||||
writeJson(exchange, 502, errorJson("Unable to proxy stream: empty upstream response."));
|
writeJson(exchange, 502, errorJson("Unable to proxy stream. Attempts: " + String.join(" | ", attemptErrors)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String contentType = response.headers().firstValue("Content-Type").orElse("application/octet-stream");
|
String contentType = response.headers().firstValue("Content-Type").orElse("application/octet-stream");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user