setnicka / ulozto-downloader

EOL - end of life | Uloz.to quick multiple sessions downloader
MIT License
279 stars 46 forks source link

Nelze stahovat soubory větší 250MB #15

Closed JakubAndrysek closed 4 years ago

JakubAndrysek commented 5 years ago

Ahoj, zkoušel jsem stahovat filmy pomocí tohoto scriptu, ale při pokusu stažení souboru většího asi 250MB mi na Linuxu (Ubuntu 18.04) vypíše error:

kuba@JA-Linux:~/Downloads/ulozto$ ./ulozto_downloader.py --parts 15 'https://ulozto.cz/file/GKc25cVhxWQV/the-100-s06e13-the-blood-of-sanctum-720p-cz-titulky-mkv' Starting downloading for url 'https://ulozto.cz/file/GKc25cVhxWQV/the-100-s06e13-the-blood-of-sanctum-720p-cz-titulky-mkv' Getting info (filename, filesize, ...) Traceback (most recent call last): File "./ulozto_downloader.py", line 233, in <module> download(args.url, args.parts, args.output) File "./ulozto_downloader.py", line 149, in download total_size = int(head.headers['Content-Length']) File "/usr/lib/python3/dist-packages/requests/structures.py", line 54, in __getitem__ return self._store[key.lower()][1] KeyError: 'content-length'

petrbel commented 5 years ago

tohle se mi zatím nikdy nestalo (4GB uplně v pohodě)

Krakonos commented 4 years ago

Ahoj, takže chyba není ve velkých souborech, ale v "některých souborech". Konkrétně funkce get_download_link(url) appendne za url ?do=slowDirectDownload a očekává že vrácená response má Location: na skutečné url; to ale vypadá, že není vždy pravda. Na některých souborech to prostě vrátí stejnou URL jako na vstupu (ta poté neobsahuje soubor a sletí to trošku podivně na místě v reportu), v těle odpovědi pak <h1>Redirect</h1>. Proč, to nevím, protože ani nevím kde vzniklo API slowDirectDownload ( @stinovlas ?)

stinovlas commented 4 years ago

API slowDirectDownload vzniklo při nějakém výročí ulozto. Od té doby jde některé soubory stáhnotu přes něj (a ne starým způsobem) a některé jen starým způsobem (a ne přes něj). Obecně, zatím se mi jakýkoliv soubor bez ohledu na velikost podařilo stáhnout buď s aktuálním obsahem master, nebo se stavem z commitu 15d72c4 (před přechodem na slowDirectDownload).

Chtělo by to najít si čas a podle obsahu stránky rozlišit o který typ stahování se jedná a podle toho zvolit nový nebo starý způsob downloadu (tedy jakási fůze 15d72c4 a e15021c + rozlišovací mechanismus).

Krakonos commented 4 years ago

Ano, no když slowDirectDownload nezafunguje, pozná se to snadno ještě v té funkci get_download_link (třeba tak, že vrátí stejnou URL jako dostala; nebo že na té vrácené URL je html dokument a né stahovaný soubor), takže by to neměl být problém.

Krakonos commented 4 years ago

Zubr, otestováno, díky!