Portál AbcLinuxu, 10. května 2025 05:34

Dotaz: BASH - jak poslat urcita data na zadanou stranku

22.12.2012 21:47 Hanyz
BASH - jak poslat urcita data na zadanou stranku
Přečteno: 889×
Odpovědět | Admin
Ahoj, tedkom resim dost zajimavou vec. Dokazu si stahnout pomoci wget "jakykoliv" soubor...ale co kdyz chci poslat nejake inforamce na nejakou www stranku, jak a cim by se to udelalo?

Zkratka, ta www stranka, kam budu posilat informace obsahuje mimo jine i 4 pole, a ja chci do tech ctyr poli najednou poslat 4 retezce (do kazdeho pole jeden), a pak nejak "simulovat" kliknuti mysi na "submit". Informace se zpracuji a objevi se na nove strance vizualne vysledek a i v podobne txt souboru. Ten soubor si uz stahnu, to uz neni problem. Slo by to nejak udelat?

Diky za pomoc!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.12.2012 21:56 Kit
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Viz man wget
--post-data=řetězec
--post-file=soubor
22.12.2012 22:08 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
aha, ja myslel ze wget umi jen stahovat. Oki a jak odsimuluju kliknuti mysi na tlacitko "submit"?
22.12.2012 22:16 Kit
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
"submit" je přece také jen odeslání dat typu key-value.
22.12.2012 22:21 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Příloha:
Dobre, uz vim, ze budu pouzivat --post-data=string, ale jak pomoci wget nasmeruju retezec k urcitemu poli na www strance? Ukazku tech ctyr poli jsem hodil do prilohy teto zrpavy.
22.12.2012 22:28 Kit
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Každý element formuláře má přece name a value. Jenom je poskládáš do stringu jako name=value.
22.12.2012 22:43 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Jo, rozumim. Nazev dvou poli, kam chci dat nejakou hodnotu, je "pdbid1" a "pdbid2". Takze nejak takhle:

wget --post-data "pdbid1=1us0&pdbid2=1byb" "http://ekhidna.biocenter.helsinki.fi/dali_lite/start"

Kdyz to spustim, tak mi to stahne soubor start.html, ze ktere nepoznam vubec co se stalo.

Jak uz jsem z ukazky napovedel, jedna se o tuto stranku "http://ekhidna.biocenter.helsinki.fi/dali_lite/start" kdyz napises do prvniho pole "Or enter PDB identifier:" hodnotu "1us0", pole "Chain" nech volne...do dalsiho pole pod nim "Or enter PDB identifier:" hodnotu "1byb" a zas vedle nej to pole "chain" nech volne. Kliknes na submit, tak se ti po chvili ukaze stranka, coz je vysledek. Slo by to nejak zmechanizovat bashem?

22.12.2012 23:06 Kit
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
wget --post-data "pdbid1=1us0&pdbid2=1byb&submit=submit" "http://ekhidna.biocenter.helsinki.fi/dali_lite/start"
Ten stažený soubor v HTML by měl obsahovat požadovaný výsledek. Jenže tam mají nějaké ochrany, tak si s tím budeš muset trochu pohrát.
Jendа avatar 22.12.2012 23:18 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Neobsahuje (viz můj komentář), protože výpočet jim chvíli trvá. Musíš následovat meta refrech na stránku s výsledkem.
22.12.2012 23:27 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
přesně tak, část url výsledku je asi unikátně vygenerová. A nad tim si ted lamu hlavu jak tu url vysledku zjistit.

Poslání informací z téhle stránky:

http://ekhidna.biocenter.helsinki.fi/dali_lite/start

udela tuhle stranku, na ktere je vysledny soubor, ktery chci stahnout:

http://ekhidna.biocenter.helsinki.fi/dali_server/results/20121223-0001-cd3fb1777c902d4f7257c388c79d3e3f079d5ce44aabe8b26189742fca2191ee/summary.txt

problem je, jak to wget rict. Tohle opravdu nevim. Napada te neco?
Jendа avatar 22.12.2012 23:15 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Implementovat se mi to nechce, ale postup, co musíš udělat:
  1. Naučíš se wgetem postovat data jako Content-Disposition: form-data. Curlem to možná půjde líp. Provázej tě LiveHTTPHeaders (plugin do Firefoxu) či Wireshark.
  2. Server ti po prvním POSTu vrátí stránku, kde je meta refresh na nějaké UUID. Následuj ho.
  3. Pak refreshuj tu stránku, na kterou tě přesměrovali (oni mají každých 6 sekund), dokud nedostaneš data.
22.12.2012 23:54 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Takže by to šlo udělat, už jsem si myslel, že je to nereálné :) Mám pár otázek.

1. "Content-Disposition: form-data" tim myslis, ze pomocí tohoto budu posilat retezce, ktere zadavam jako vstup te www strance?

2. LiveHTTPHeaders tím se budu koukat které umí zobrazovat http hlavičky? Takže je to jen pro kontrolu, skript bude fungovat i bez toho?

3. POST mi vratí stránku (takže wget si stáhne nějakou html stránku), kde bude meta refresh na nějaké uuid. To uuid je nejaký jedinečný identifikátor, který bude ve zdrojovem kodu té stažené html stránky? Takže to uuid by mohlo být z tohoto odkazu:

http://ekhidna.biocenter.helsinki.fi/dali_server/results/20121223-0001-cd3fb1777c902d4f7257c388c79d3e3f079d5ce44aabe8b26189742fca2191ee/summary.txt

tohle číslo?

20121223-0001-cd3fb1777c902d4f7257c388c79d3e3f079d5ce44aabe8b26189742fca2191ee

Závěrem chci dodat, je to pro mě celé jedna velká novinka :D Budu rád za jekékoliv popostrčení!
Jendа avatar 23.12.2012 00:03 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
1. No on to není „normální“ POST, ale takový ten divný, kterým se přenáší velká data, a já ho neumím wgetem poslat.

2. Tím budeš koukat ve Firefoxu, co přesně se děje. Případně Wireshark + funkce „follow TCP stream“

3. Ano, a to číslo (respektive celou tu URL) z toho musíš nějak vyparsovat a wgetnout si ji.
23.12.2012 00:13 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
ad 1. Ted si asi trosku nerozumime, já nepotřebuju přenášet velká data. Jen nanejvýš 4-znakový řetezce, které pošlu do těch polí.
Jendа avatar 23.12.2012 00:20 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Ten formulář má nastavený atribut enctype="multipart/form-data". Naštěstí to vypadá (teď jsem to zkusil), že ten webserver na tom nelpí, takže mu to jde poslat i takhle:
> wget http://ekhidna.biocenter.helsinki.fi/dali_lite/ControlScript --post-data="pdbfile1=&pdbid1=1us0&chainid1=&pdbfile2=&pdbid2=1byb&chainid2=&submit=submit" -O - -S
23.12.2012 00:26 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Jo, vyzkouším to, ale kukni se, co tu dal uživatel "chrono". To ušetří hodně prace!
23.12.2012 00:36 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
aha, je to stejne, jen napsane jako prikaz. Uz jdu radsi do sveta snu, mozek uz mam pekne zrizeny! Diky za pomoc tobe i kolegum! Moc jste mi pomohli a ja se zase necemu novemu priucil ;)
23.12.2012 00:14 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Správne url, kam treba tie údaje pomocou POST poslať je http://ekhidna.biocenter.helsinki.fi/dali_lite/ControlScript Treba tam poslať všetky vstupné elementy (teda možno nie úplne všetky, ale tie tri, ktoré sú spomínané vyššie nestačia), takže niečo to bude niečo ako: pdbfile1=&pdbid1=1us0&chainid1=&pdbfile2=&pdbid2=1byb&chainid2=&submit=submit

V odpovedi potom príde:
<html>
  <head>
    <title>Redirecting to results page...</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="refresh"
          content="0; url=http://ekhidna.biocenter.helsinki.fi/dali_server/results/20121223-0005-cd3fb1777c902d4f7257c388c79d3e3f079d5ce44aabe8b26189742fca2191ee/index.html">
  </head>
</html>
23.12.2012 00:20 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Inak po získaní tej adresy s výsledkom stačí potom opakovane načítavať ten súbor summary.txt a kontrolovať, či program wget vráti návratový kód iný ako 8 (8 je chyba serveru, teda napr. aj neexistujúci súbor).
23.12.2012 00:28 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
jasný, supeer,chlape, tys mi vythrl trn z paty!! ;) ted me tak napada, jak opakovane nacita soubor?
23.12.2012 00:38 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
V skripte sa použije nejaký cyklus, v ktorom bude načítavanie toho súboru pomocou wget a test návratovej hodnoty wget (návratová hodnota bude v premennej $?). Ak tá návratová hodnota nebude 8, tak buď sa ten súbor podarilo načítať, alebo nastala iná chyba (a je otázne, či má zmysel pokračovať, pretože môže ísť napr. o výpadok siete). V takom prípade sa ten cyklus ukončí (pravdepodobne pomocou break).

PS: Samozrejme do toho cyklu treba pridať aj sleep.
23.12.2012 00:25 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Tak tohle je genialni!!! Ja si na to prisel prosimte? Tohle mi usetrilo kotel prace!

Neskonale DÍKY!!!
23.12.2012 00:35 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Ten form má adresu v action atribúte (konkrétne je tam "ControlScript"). Po odoslaní neúplných dát na tú adresu vráti server chybu 500, takže asi kontroluje viac vecí (alebo je len zle naprogramovaný).
23.12.2012 00:40 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Toho bych si minimálně dneska vubec nevšiml. Ještě jednou díky!!
Jendа avatar 23.12.2012 00:40 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Ja si na to prisel prosimte?
Já si to poslechl Wiresharkem.
24.12.2012 23:39 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Příloha:
Ahoj, kolonou regulárních výrazů jsme si vyřezal jen tu url, pomocí které chci stáhnout požadovaný textový soubor summary.txt (kolonu regulárních výrazů posílám v příloze). Výsledný odkaz je takový (možná odkaz nebude fungovat, tuším že odkaz je vždy funkční jen pár hodin...ale když se spustí příkazy co jsou v přiloze, vygeneruje se odkaz nový):

http://ekhidna.biocenter.helsinki.fi/dali_server/results/20121225-0019-6eb212de8afe6a0e681a2e9507b448015db4c3738c921f2d3b0241df1133041f/summary.txt

Nechápu to, že když dám wget -O summary.txt "$summary" tak mi to vypíše chybu:

HTTP request sent, awaiting response... 404 Not Found

2012-12-24 23:18:57 ERROR 404: Not Found.

Vždyt v proměnné $summary mám url k souboru a je správně, protože, když dám tu adresu nástroji wget přímo, tak to stáhne bez problému. Nechápu co dělám blbě? Díky za rady!
25.12.2012 09:34 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Server potrebuje na vygenerovanie toho súboru nejaký čas. Preto som písal, že tam bude musieť byť cyklus, v ktorom sa bude ten súbor opakovane načítavať a ak wget vráti návratový kód 8, tak sa (po nejakej krátkej prestávke) pokúsi ten súbor načítať znova. Pri návratovom kóde 0, sa ten súbor pravdepodobne podarilo stiahnuť, takže sa cyklus môže ukončiť a pri inej chybe asi nemá zmysel ďalej pokračovať.
25.12.2012 16:47 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Jasně, potřebuje nějaký čas. Nechápal jsem to, že když jsem ten odkaz dal přímo wget , tak soubor stáhl hned bez problému (nebo do prohlížeče)...ale když jsem místo přímémo odkazu mu dal proměnnou, která obsahovala ten samý odkaz, už to psalo chybu. Tohle na tom nechápu.

Dále nechápu ten návratový kód 8, ať dělám co dělám, vždy se mi vrátí 0 nebo 1. Já mám za to, že návratový kód nějakého příkazu je buď 0 (proběhlo vše ok) anebo 1 (nějaká chyba).

Dělám to nějak takhle:

...tady mam kolonu příkazů, kde ve výsledné proměnné $summary je url k souboru..

if [ -n "$summary" ]; then       # podminka na neprazdny retezec, jestli byl vygenerovan url

    wget -O summary.txt $summary

    while [ "$?" -eq 1 ]; do        # cykli, dokud exit-code vyse uvedenho wget je roven 1

        sleep 8         # pockej 8 sekund a zkus ho stahnout znova

        wget -O summary.txt "$summary"

    done

else

    echo "chyba, odkaz neni validni"

fi

Myslel jsem to takhle. V té nejvyšší podmínce kontroluju, zda-li je proměnná $summary prázdná. V té promměné mám uloženou url k souboru, který chci stáhnout (když je odkaz špatný, tak zkončí). Dále v prvním wget se pokusím stáhnout soubor summary.txt rovnou. Pokud to nepujde, wget vratí exit-code=1, jde do cyklu a tam počká 8 sekund a pokusí se soubor znova stáhnout. Jak ho stahne, končí. Takhle si to myslel? Zatím to jakš takš funguje.
25.12.2012 17:01 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Program môže vrátiť akýkoľvek kód medzi 0-255 (teda taký, čo sa zmestí do jedného bajtu). To, aké kódy môže wrátiť wget je v jeho návode (v každej normálnej manuálovej stránke k programom je aj sekcia s návratovými kódmi). Napr. wget "http://abclinuxu.cz/xxxxxxxxxxxxxxxxxx"; echo $? vypíše 8.
25.12.2012 17:16 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Do manualu k wget se teda ještě jednou podívam, ale co jsem si po zadání man wget pročetl a prolistoval, exit-cody tam nebyly. Maximálně na konci je zmínka o chybách. Nicmene po zadani tve ukazky se mi vratilo:

....

HTTP požadavek odeslán, program čeká na odpověď… 404 Not Found

2012-12-25 17:09:37 CHYBA 404: Not Found.

1

Buď si trochu nerozumíme, nebo osmičku tam opravdu nevidím.
25.12.2012 17:22 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Nevšimol som si poznámku, že vo verziách 1.12 a starších je návratový kód viac menej nepoužiteľný.

http://www.gnu.org/software/wget/manual/wget.html#Exit-Status
25.12.2012 17:34 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Já mám GNU Wget 1.11.4 . Jinak, když se kukneš na muj postup, který jsem před půlhodinou o 2 příspěvky výše sem hodil, myslíš, že by to takhle šlo?
Jendа avatar 25.12.2012 17:25 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Jak píše chrono níže, tak chybu budeš muset detekovat nějak jinak. Třeba že se ti tam ten správný soubor nevytvoří.
25.12.2012 17:35 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Když se mi tam ten soubor nevytvoří, tak ho wget nestáhne, čili jeho exid-soce bude 1. Takhle to ted mám. To by mohlo jít, ne?
25.12.2012 18:48 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
*exit-code

škoda, že nejdou příspěvky upravovat.
8.1.2013 21:56 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, již jsem udělal několik podobných skriptů, které se dotazovaly podobných stránek, ale tahle jedna mi zatím odolává. Popíšu postup jak na to jdu.

Jedná se o tuto stránku.

Na tuto stránku posílám pomocí metody POST a příkazu wget tohle (jednotlivé parametry jsem zjistil ze zdrojového kodu stránky):
wget http://mspc.bii.a-star.edu.sg/minhn/pairwise.html --post-data="prot1=1us0&chain1=A&prot1file=&prot2=1k78&chain2=I&prot2file=&typeAtom=CA&SS_chkbox=on&SA_chkbox=on&RD_chkbox=on&SUBMIT=Run CLICK" -O - -S
- výše uvedený příkaz i s parametry je to samé, jako by jste na té stránce vyplnily tyto údaje:

Do "First Structure" dát 1us0 a do vedlejšího boxu "chains" dát (jeden znak) A

Do "Second Structure" dát 1k78 a do vedlejšího boxu "chains" dát (jeden znak) I

A pochopitelně kliknout na RUN.

Mělo by mi to vrátit v odpovědi url (nebo alespoň jeho část) na výslednou stránku, ale neděje se tak. Věděl by někdo proč?

Díky
8.1.2013 22:56 bull
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
tohle jsem vygooglil asi před měsícem, třeba to pomůže (sry, celou diskuzi jsem nečetl): zde

a něco je i na youtube: zde
15.1.2013 20:04 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Díky, jsem díky tomu o něco chytřejší. Zkusil jsem to i pomocí curl, ale pořád nic. Pořád v odpovědi nedostávám žádný odkaz na výslednou url.

Věděl by někdo?
15.1.2013 20:50 Hanyz
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Zjistil jsem, že se informace posílají na jinou stránku:

wget http://mspc.bii.a-star.edu.sg/cgi-minhn/run_click.py --post-data="prot1=1us0&chain1=A&prot1file=&prot2=1k78&chain2=I&prot2file=&typeAtom=CA&SS_chkbox=on&SA_chkbox=on&RD_chkbox=on&SUBMIT=Run CLICK" -O - -S

Ale výsledek pořád žádný..
15.1.2013 22:38 chrono
Rozbalit Rozbalit vše Re: BASH - jak poslat urcita data na zadanou stranku
Pre odosielanie dát sa tam používa multipart/form-data a wget to nepodporuje takže napr. s curl by to mohlo vyzerať nejako takto:
curl -o - -F "prot1=1us0" -F "chain1=A" -F "prot1file=" -F "prot2=1k78" -F "chain2=I" -F "prot2file=" -F "typeAtom=CA" -F "SS_chkbox=on" -F "SA_chkbox=on" -F "RD_chkbox=on" -F "SUBMIT=Run CLICK" http://mspc.bii.a-star.edu.sg/cgi-minhn/run_click.py
Časť -o - spôsobí, že sa výsledok vypíše na štandardný výstup a je možné, že bude rozumnejšie uložiť to niekam inam. Každopádne v odpovedi je potom aj presmerovanie na stránku, na ktorej sa potom zobrazia požadované údaje.

PS: Namiesto parametra -F sa môže použiť --form-string (parameter -F môže totiž poslať nejaký súbor, je to popísané v návode k curl).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.