Add curl fallback for protected HLS segments
This commit is contained in:
+32
@@ -4529,6 +4529,38 @@ seg-3.ts
|
||||
self.assertNotIn("Origin", headers)
|
||||
self.assertEqual(headers["Sec-Fetch-Dest"], "video")
|
||||
|
||||
def test_curl_fetch_bytes_returns_body_before_status_marker(self):
|
||||
proc = mock.Mock(returncode=0, stdout=b"video-bytes\nKAIZOKU_HTTP_STATUS:200", stderr=b"")
|
||||
|
||||
with mock.patch.object(provider_downloader, "curl_candidates", return_value=["/usr/bin/curl"]), mock.patch.object(
|
||||
provider_downloader.subprocess, "run", return_value=proc
|
||||
) as run:
|
||||
data = provider_downloader.curl_fetch_bytes("https://cdn.example/segment.ts", headers={"Referer": "https://player.example/"})
|
||||
|
||||
self.assertEqual(data, b"video-bytes")
|
||||
self.assertIn("--header", run.call_args.args[0])
|
||||
self.assertIn("Referer: https://player.example/", run.call_args.args[0])
|
||||
|
||||
def test_fetch_bytes_retries_forbidden_media_with_curl_fallback(self):
|
||||
error = urllib.error.HTTPError(
|
||||
"https://cdn.example/segment.ts",
|
||||
403,
|
||||
"Forbidden",
|
||||
hdrs={},
|
||||
fp=None,
|
||||
)
|
||||
|
||||
try:
|
||||
with mock.patch.object(provider_downloader.urllib.request, "urlopen", side_effect=error), mock.patch.object(
|
||||
provider_downloader, "curl_candidates", return_value=["/usr/bin/curl"]
|
||||
), mock.patch.object(provider_downloader, "curl_fetch_bytes", return_value=b"video") as curl_fetch:
|
||||
data = provider_downloader.fetch_bytes("https://cdn.example/segment.ts")
|
||||
finally:
|
||||
error.close()
|
||||
|
||||
self.assertEqual(data, b"video")
|
||||
curl_fetch.assert_called_once()
|
||||
|
||||
def test_hls_segments_need_native_download_for_extensionless_provider_urls(self):
|
||||
self.assertTrue(
|
||||
provider_downloader.hls_segments_need_native_download(
|
||||
|
||||
Reference in New Issue
Block a user