mirror of
https://github.com/Viren070/mediaflow-proxy.git
synced 2025-12-01 23:22:12 +01:00
Fix proxy stream request headers not passing for seeking the content
This commit is contained in:
@@ -2,23 +2,11 @@ from fastapi import Request, Depends, APIRouter
|
||||
from pydantic import HttpUrl
|
||||
|
||||
from .handlers import handle_hls_stream_proxy, proxy_stream, get_manifest, get_playlist, get_segment, get_public_ip
|
||||
from .utils.http_utils import get_proxy_headers
|
||||
|
||||
proxy_router = APIRouter()
|
||||
|
||||
|
||||
def get_proxy_headers(request: Request) -> dict:
|
||||
"""
|
||||
Extracts proxy headers from the request query parameters.
|
||||
|
||||
Args:
|
||||
request (Request): The incoming HTTP request.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary of proxy headers.
|
||||
"""
|
||||
return {k[2:]: v for k, v in request.query_params.items() if k.startswith("h_")}
|
||||
|
||||
|
||||
@proxy_router.head("/hls")
|
||||
@proxy_router.get("/hls")
|
||||
async def hls_stream_proxy(
|
||||
|
||||
@@ -3,12 +3,24 @@ from urllib import parse
|
||||
|
||||
import httpx
|
||||
import tenacity
|
||||
from starlette.requests import Request
|
||||
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
|
||||
|
||||
from mediaflow_proxy.configs import settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
supported_request_headers = [
|
||||
"accept",
|
||||
"accept-encoding",
|
||||
"accept-language",
|
||||
"connection",
|
||||
"transfer-encoding",
|
||||
"range",
|
||||
"if-range",
|
||||
"user-agent",
|
||||
]
|
||||
|
||||
|
||||
class DownloadError(Exception):
|
||||
def __init__(self, status_code, message):
|
||||
@@ -220,7 +232,7 @@ def encode_mediaflow_proxy_url(
|
||||
return f"{base_url}?{encoded_params}"
|
||||
|
||||
|
||||
def get_original_scheme(request) -> str:
|
||||
def get_original_scheme(request: Request) -> str:
|
||||
"""
|
||||
Determines the original scheme (http or https) of the request.
|
||||
|
||||
@@ -249,3 +261,18 @@ def get_original_scheme(request) -> str:
|
||||
|
||||
# Default to http if no indicators of https are found
|
||||
return "http"
|
||||
|
||||
|
||||
def get_proxy_headers(request: Request) -> dict:
|
||||
"""
|
||||
Extracts proxy headers from the request query parameters.
|
||||
|
||||
Args:
|
||||
request (Request): The incoming HTTP request.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary of proxy headers.
|
||||
"""
|
||||
request_headers = {k: v for k, v in request.headers.items() if k in supported_request_headers}
|
||||
request_headers.update({k[2:].lower(): v for k, v in request.query_params.items() if k.startswith("h_")})
|
||||
return request_headers
|
||||
|
||||
Reference in New Issue
Block a user