Wat er moet gebeuren voordat een webpagina je haar bestand geeft
Je ziet de video. Hij speelt gewoon, daar, in de webbrowser. Waarom is er dan geen enkele manier om hem te houden? Het antwoord is dat een webpagina zelden een bestand overhandigt — ze overhandigt instructies, en het bestand dat de browser daaruit samenstelt bestaat mogelijk helemaal niet als één ding.
FoxDL Vier manieren waarop een pagina video levert, waarvan er maar één een bestand is
De oudste en eenvoudigste is een rechtstreeks bestand: de pagina wijst naar een adres dat eindigt op .mp4 en de browser haalt het op. Kun je dat adres vinden, dan heb je het bestand. Zo werken de meeste kleinere sites, fora, nieuwsmedia en bestandshosts nog steeds.
De tweede is adaptieve streaming — HLS of DASH. De pagina laadt een playlist met honderden korte segmenten op meerdere kwaliteitsniveaus, en de speler rijgt ze onderweg aaneen en wisselt van kwaliteit zodra je verbinding verandert. Er is geen enkel bestand te vinden. Het opslaan betekent elk segment ophalen en er een bestand van opbouwen.
De derde is een blob-URL. De pagina heeft de data al met JavaScript opgehaald en de speler een verwijzing gegeven naar iets dat in het geheugen van de browser zelf leeft. Het adres dat je ziet (blob:https://…) betekent buiten die pagina en die sessie helemaal niets — het valt niet te openen, te delen of te downloaden, en hierop struikelen de meeste naïeve “videovinders”.
De vierde is beveiligde inhoud: versleutelde segmenten die via een DRM-systeem worden afgespeeld, waarbij de ontsleutelsleutel aan de browser wordt verstrekt onder voorwaarden die het bewaren van een kopie uitdrukkelijk verbieden. Dat is geen obstakel om omheen te werken; het is het mechanisme waarop een licentieovereenkomst gebouwd is, en geen enkel legitiem hulpmiddel omzeilt het.
Hoe een webbrowser doorkrijgt dat er iets te bewaren valt
Een ingebouwde webbrowser die aanbiedt te bewaren wat hij vindt, doet meerdere dingen tegelijk. Elk daarvan vangt een geval op dat de andere missen.
- De media-elementen van de pagina lezen
- Het document doorlopen op
<video>-,<audio>- en<source>-tags en hun adressen uitlezen. Vangt het geval van het rechtstreekse bestand meteen op, en mist alles wat JavaScript na het laden van de pagina heeft opgebouwd. - In de shadow DOM kijken
- Moderne spelers zijn eigen elementen waarvan het binnenwerk bewust van de pagina is afgeschermd. Een zoektocht die bij het gewone document stopt, ziet een lege doos op de plek waar de video zit.
- Bijhouden wat de pagina daadwerkelijk opvroeg
- De browser kent elke bron die een pagina ophaalde. Een mediabestand dat geladen is — ongeacht welk script erom vroeg, of wanneer — duikt hier op, ook al wijst niets in de zichtbare pagina ernaar.
- Het type van het antwoord besnuffelen
- Een URL die eindigt op
.phpkan een video teruggeven, en een URL die eindigt op.mp4kan een foutpagina teruggeven. HetContent-Typedat de server werkelijk meestuurde, vertelt je welke van de twee het is — extensies zijn een gok.
Hoe bewaren vanaf een pagina eruitziet als het lukt
De volgorde doet ertoe. De meeste mislukkingen komen doordat de tweede stap wordt overgeslagen en er een overdracht van vier gigabyte aan inlogpagina begint.
-
Speel eerst een seconde van de media af
Veel pagina’s laden niets tot het afspelen begint. Twee seconden afspelen is vaak het verschil tussen een lege lijst met kandidaten en een volle.
-
Controleer wat de kandidaat werkelijk is
Kijk voordat je begint naar de opgegeven grootte en het type. Een “film” van 14 KB is een HTML-pagina. Een type
text/htmlwaar jevideo/mp4verwachtte, betekent dat je de verkeerde link hebt. -
Kies de kwaliteit die je wilt
Een stream biedt er meestal meerdere. De hoogste is op een telefoon niet altijd het juiste antwoord, want daar is het verschil onzichtbaar en de opslag niet.
-
Laat de sessie meereizen
Beveiligde links controleren wie het vraagt: de cookies van je ingelogde sessie, de pagina die je doorverwees, soms de identiteit van de browser. Een download die zonder die dingen begint, krijgt een 403, ook al speelde de pagina prima.
-
Controleer wat er is binnengekomen
Open het. Een bestand dat twee seconden speelt en dan stopt is afgekapt — meestal een verlopen link — en dat kun je beter opnieuw beginnen dan bewaren.
Wat een ingebouwde webbrowser goed moet doen
Behalve de media vinden, bepalen deze dingen of de download daadwerkelijk afkomt.
- De sessie doortrekken naar de download
Cookies, referer en user agent moeten met het verzoek meereizen. Zonder die drie lost een beveiligde link in de pagina wel op en faalt hij in de downloader.
- Die gegevens buiten de opslag houden
Een sessiecookie is voor de duur van de sessie net zo goed als een wachtwoord. Die hoort voor de duur van de overdracht in het geheugen te staan en nergens anders — niet in een database, niet in een logbestand.
- Weigeren de link aan een andere app te geven
iOS opent een aangetikte link maar wat graag in een andere app als die het domein claimt. Een webbrowser die bedoeld is om media te bewaren, moet de navigatie annuleren en zelf opnieuw uitvoeren, anders verdwijnt de pagina die je wilde in de app van iemand anders.
- De pagina snoeien voordat hij wordt getoond
Een contentblokkeerder gaat hier niet alleen over reclame — minder trackers en overlays betekent minder valse kandidaten in de medialijst.
- Ook documenten aankunnen, niet alleen video
Pdf’s, ZIP-bestanden en Office-bestanden zijn de andere helft van wat mensen van het web bewaren, en die horen in dezelfde bibliotheek te belanden als al het andere.
Vragen die mensen stellen
Waarom kan Safari dit niet zelf?
Safari downloadt wel degelijk bestanden — al sinds iOS 13. Wat het niet doet, is een pagina onderzoeken op media die gestreamd wordt in plaats van gelinkt, of een stream in segmenten weer tot een bestand opbouwen. Het is een webbrowser, en dat werk hoort bij een downloadbeheerder.
Wat is een blob-URL en waarom kan ik hem niet downloaden?
Het is een greep op data die de pagina al in het geheugen heeft. Buiten dat tabblad bestaat hij niet, dus als je hem ergens plakt, levert dat niets op. De onderliggende media is ergens echt vandaan gehaald, en dát adres — niet de blob — is het adres dat de moeite waard is om te vinden.
De pagina speelt prima, maar de download krijgt een 403. Hoe kan dat?
Het downloadverzoek kwam aan zonder de dingen die de pagina wel had: je sessiecookie, de doorverwijzende pagina, soms een bijpassende browseridentiteit. Servers gebruiken precies die combinatie om een kijker van een scraper te onderscheiden.
Kan alles bewaard worden?
Nee, en dat is met opzet. Inhoud die met DRM is beveiligd, is versleuteld met sleutels die onder een licentie worden verstrekt die het bewaren verbiedt. Sommige sites ondertekenen bovendien elk segment afzonderlijk met kortlevende tokens. Beide werken zoals bedoeld.
De webbrowser in FoxDL
Het is een gewone browser met tabbladen, waarvan het werk is dingen in je bibliotheek te krijgen en niet je dagelijkse browser te zijn.
- Zes detectiekanalen, waaronder de shadow DOM en de registratie van wat de pagina werkelijk opvroeg, zodat een speler die volledig in JavaScript is gebouwd toch zichtbaar is.
- Het echte type wordt besnuffeld uit het antwoord in plaats van geraden uit de extensie, en
blob:-kandidaten die niet op te halen zijn worden eruit gefilterd in plaats van aangeboden om vervolgens te mislukken. - Cookies, referer en user agent reizen mee naar de download zodat een beveiligde link oplost — en geen van drieën wordt ooit naar schijf geschreven.
- Een contentblokkeerder snoeit de pagina voordat hij wordt getoond.
- Pdf’s, ZIP-bestanden en documenten worden met één tik in dezelfde bibliotheek als media bewaard.
- Tabbladen, bladwijzers en een startpagina met je eigen snelkoppelingen.
FoxDL levert geen enkele eigen inhoud. Wat je bewaart is wat je zelf meebracht, en jij bent verantwoordelijk voor het recht om het te houden.
Veelgestelde vragen
- Hoe download ik een bestand van een webpagina?
- Kan FoxDL een HLS (m3u8)-stream downloaden?
- Lopen downloads door als ik de app verlaat?
- Levert FoxDL IPTV-kanalen, films of streams?
Verder lezen
Wat een downloadbeheerder doet en een webbrowser niet
Waarom overdrachten stoppen als je van app wisselt, wat hervatten werkelijk vereist, en hoe streams bestanden worden.
Wat een media-app op je telefoon kan zien, en wat hij nooit hoort te versturen
Wat een media-app kan zien, hoe je een privacylabel leest, en waarom een slot geen versleuteling is.
Waar je bestanden werkelijk staan op een iPhone, en wie ze kan zien
De sandbox, waar downloads werkelijk belanden, en waarom een bestand hernoemen zo veel apps sloopt.
Je bibliotheek, eindelijk op één plek.
Gratis downloaden. Geen account, geen aanmelding — de volledige set zit in de gratis versie.