Fix proxy stream request headers not passing for seeking the content

This commit is contained in:
mhdzumair
2024-08-25 22:28:42 +05:30
parent 91a344e522
commit 879f4ac7a2
2 changed files with 29 additions and 14 deletions
+1 -13
View File
@@ -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(
+28 -1
View File
@@ -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