Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Le_Ze 13. 05. 2017, 11:28:20

Název: Stažení souboru přes wget
Přispěvatel: Le_Ze 13. 05. 2017, 11:28:20
Zdravím.
Bych potřeboval pomoct s tímto problémem.
Přihlásím se na jednu internetovou stránku přes firefox.
Chce to jméno, heslo a pak ještě pin.
Při přihlašovaní zaškrtnu přihlašovat automaticky.
Stáhnu soubor.
Když pak ve firefoxu vlezu do nástroje - stahovaní - kliknu na stažený soubor dam kopírovat stahovaný odkaz.
Zkopírovaný odkaz pak vložím do prohlížeče, vyskočí mi okno s dotazem, kam ho chci uložit.
V cookies jsem našel k té stránce autologin.
Bych potřeboval, aby se mi ten soubor stahoval automaticky třeba přes skript spouštění přes crona.
Jsem se dočet že cookies se dá  poslat i přes wget.
Pujde to vyřešit a jak na to?


Název: Re:Stažení souboru přes wget
Přispěvatel: Ondra Satai Nekola 13. 05. 2017, 11:39:53
User firendly reseni cookies:

$ http example.org  User-Agent:Bacon/1.0  'Cookie:valued-visitor=yes;foo=bar'  X-Foo:Bar  Referer:http://httpie.org/

pri pouziti https://httpie.org/

Ty hodnotu cookie bud vydestiluj z FF, lepsi je ale v jednom dotazu pres httpie udelat login, z nej si vzit tu cookie a...
Název: Re:Stažení souboru přes wget
Přispěvatel: Ivan Nový 13. 05. 2017, 11:41:34
http://stackoverflow.com/questions/1324421/how-to-get-past-the-login-page-with-wget
Název: Re:Stažení souboru přes wget
Přispěvatel: Ivan Nový 13. 05. 2017, 11:42:44
Kód: [Vybrat]
wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page'
Název: Re:Stažení souboru přes wget
Přispěvatel: Le_Ze 13. 05. 2017, 12:11:21
http://stackoverflow.com/questions/1324421/how-to-get-past-the-login-page-with-wget

JJ, toto jsem našel. a zkoušel.

Takto mi to na disku stahne ale misto toho co tam ma byt je uložena ta www stranka.
wget --content-disposition https://www.-------

wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

Tam kde je ten skript jsem vytvořil soubor cookies.txt a do něj skopiroval ten obsah s cookies.
Vypada takto
a%3B2%3A%7Cs%3A7%3A%22user_id%2%3Bs%3A5%3A%2262230%22%4Cs%3A3%3A%22key%22%3Bs%3A16%3A%22ecdf845b39bdaef%22%3B%7D

A nefunguje.Zas ta stažena stranka s WWW
Dělam něco špatně?
Název: Re:Stažení souboru přes wget
Přispěvatel: Le_Ze 13. 05. 2017, 12:25:00
Hm,vzdavam to.
Koukam že to mam vše špatně.
Toto už je nad ramec mých znaloctí  :-\
Název: Re:Stažení souboru přes wget
Přispěvatel: Ivan Nový 13. 05. 2017, 12:34:35
http://stackoverflow.com/questions/1324421/how-to-get-past-the-login-page-with-wget

JJ, toto jsem našel. a zkoušel.

Takto mi to na disku stahne ale misto toho co tam ma byt je uložena ta www stranka.
wget --content-disposition https://www.-------

wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

Tam kde je ten skript jsem vytvořil soubor cookies.txt a do něj skopiroval ten obsah s cookies.
Vypada takto
a%3B2%3A%7Cs%3A7%3A%22user_id%2%3Bs%3A5%3A%2262230%22%4Cs%3A3%3A%22key%22%3Bs%3A16%3A%22ecdf845b39bdaef%22%3B%7D

A nefunguje.Zas ta stažena stranka s WWW
Dělam něco špatně?

Zkuste ten druhý příklad, který jsem uváděl, v první wgetu se provede přihlášení podle účtu a hesla, uložení cookies, ve druhém wgetu pak načtení uložených cookies a stažení stránky.
Název: Re:Stažení souboru přes wget
Přispěvatel: Le_Ze 13. 05. 2017, 13:07:22
Ono je problem že tam je to jmeno - heslo a pak to ještě chce ten pin.
To už jsem zkoušel takto
wget --user=NAME --password='PASSWORD' url
Název: Re:Stažení souboru přes wget
Přispěvatel: jj2 13. 05. 2017, 13:14:26
https://addons.mozilla.org/en-US/firefox/addon/cliget/
toto ti vygeneruje kompletni url jak pro wget tak pro curl
Název: Re:Stažení souboru přes wget
Přispěvatel: Le_Ze 13. 05. 2017, 13:56:34
jj2 - děkují moc, vyzkouším  ;)
Název: Re:Stažení souboru přes wget
Přispěvatel: Ondrej Nemecek 13. 05. 2017, 15:57:48
https://addons.mozilla.org/en-US/firefox/addon/cliget/
toto ti vygeneruje kompletni url jak pro wget tak pro curl

Firefox to umí sám o sobě - F12, panel síť, najít řádek tím požadavkem, který chceme opakovat v konzoli, pravou myší a dát "kopíroval jako curl". Pak vložit do linuxové konzole a otestovat. Je potřeba mít správnou verzi curl, aby byly všechny přepínače podporované.

Problém ale asi bude, že přihlašovací cookie budou asi časově omezené, takže pro trvalé univerzální řešení by bylo potřeba stejným způsobem odchytit požadavek na přihlášení a poté v druhém soubor stáhnout. Různé ochranné mechanismy to mohou ještě dále komplikovat. Nejlepší je, pokud služby nabízí přímo API pro realizaci dávkových úloh, ale to asi není váš případ :-)
Název: Re:Stažení souboru přes wget
Přispěvatel: . 13. 05. 2017, 21:40:10
Citace: Le_Ze
Ono je problem že tam je to jmeno - heslo a pak to ještě chce ten pin.
Tak pošleš ještě ten pin.
Citace: Le_Ze
To už jsem zkoušel takto
wget --user=NAME --password='PASSWORD' url
A to má jako dělat co?
Název: Re:Stažení souboru přes wget
Přispěvatel: Le_Ze 14. 05. 2017, 06:41:05
Tak jsem zkusíl ten curl, jak psal jj2 a funguje. ;)

Ještě dotaz.
Když jsem to dal do bash skriptu.
Da se nějak otestovat, jestlí se mu to podařilo stahnout?
Název: Re:Stažení souboru přes wget
Přispěvatel: nobody(ten pravej) 14. 05. 2017, 15:47:04
Da se nějak otestovat, jestlí se mu to podařilo stahnout?

predpokladam ze obecne testovanm navatove hodnoty, 0 je ok, >0 zadrhel...
curl s paramentry && echo ok || echo problem

misto echo si tam samozrejme dej co potrebujes (pokud si overis ze to takto jde pro tvuj pripad), treba nastaveni promene kterou dale ve skriptu budes kontrolovat a podle toho delat kroky jako ukoncit program, nebo znovu pustit tahani souboru po 1 minute atd...
Název: Re:Stažení souboru přes wget
Přispěvatel: Le_Ze 15. 05. 2017, 09:09:23
Ještě jeden problem.
Když soubor chcí stahnout znovu, napiše mi to, že soubor je jíž stažen.
Jak ho přepsat?
i když ho ručně smažu, a chci stahnout znovu tak to napiše že už byl stažen.
Název: Re:Stažení souboru přes wget
Přispěvatel: jj2 15. 05. 2017, 18:45:32
Vůbec by nebylo špatné, kdybys napsal co se přesně pokoušíš stáhnout a detailní postup jakým to děláš. Zkus třeba toto:
Kód: [Vybrat]
url="http://nejakyweb/soubor"; while true; do curl -# --globoff "$url" > ~/soubor && echo -n "$url ...staženo! ";date;sleep 60; doneto by mělo stáhnout soubor každou minutu a přepsat ten starý. Pozor ale toto ti neotestuje jestli se opravdu stahuje to co má. Když by ti server poslal treba 404 tak ti to uloží do souboru ten error! Lepší bys na to měl asi nějaký robustnější script který bude postupně testovat podmínky pro stažení (jsem online? je server online? mám dost místa na disku? ...atd) a stahovat až v případě že je všecko ok. Je to sice pomalejší takový "trial by error" no těch věcí které se můžou podělat je docela hodně a takto hned přesně zjistíš kde to drhne. Stáhnout soubor pod novým názvem a ten starý smazat až v případě že se během stahování nevyskytla chyba mi přijde taky bezpečnější, než ho rovnou přepisovat.

Citace
i když ho ručně smažu, a chci stahnout znovu tak to napiše že už byl stažen.
Toto se mi moc nezdá. To ti hlásí curl nebo wget? Mrkni se do manuálu na přepínač -J to by mohlo být ono.